From a744d8360ea2eb72500008590abbaa38da07eb07 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 8 Jan 2025 15:31:54 -0600 Subject: [PATCH 01/31] containerapi: add deprecation notices Signed-off-by: Hank Donnay --- rhel/internal/containerapi/containerapi.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/rhel/internal/containerapi/containerapi.go b/rhel/internal/containerapi/containerapi.go index db566bdc4..0bc9e5d1a 100644 --- a/rhel/internal/containerapi/containerapi.go +++ b/rhel/internal/containerapi/containerapi.go @@ -1,4 +1,7 @@ // Package containerapi is a minimal client around the Red Hat Container API. +// +// Deprecated: This package's functionality should only be required for +// container images that are long-since out of support. package containerapi import ( @@ -10,6 +13,7 @@ import ( "net/url" "path" "strings" + "sync" "github.com/quay/zlog" ) @@ -38,6 +42,13 @@ type ContainerAPI struct { // GetCPEs fetches CPE information for given build from Red Hat Container API. func (c *ContainerAPI) GetCPEs(ctx context.Context, nvr, arch string) ([]string, error) { + deprecationWarning.Do(func() { + zlog.Warn(ctx). + Bool("deprecation", true). + Msg("support for the Red Hat Container API will be removed in a future release") + zlog.Warn(ctx). + Msg("container images using this code are extremely old!") + }) uri, err := c.Root.Parse(path.Join("v1/images/nvr/", nvr)) if err != nil { return nil, err @@ -80,3 +91,5 @@ func (c *ContainerAPI) GetCPEs(ctx context.Context, nvr, arch string) ([]string, } return nil, nil } + +var deprecationWarning sync.Once From 9d884f2c1070f03a8e701b019f1dfd95f3334678 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 14 May 2025 09:28:01 -0500 Subject: [PATCH 02/31] catalog: additional ParsedData types, docs Signed-off-by: Hank Donnay --- test/redhat/catalog/catalog.go | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/test/redhat/catalog/catalog.go b/test/redhat/catalog/catalog.go index 981793b3f..3859dc21b 100644 --- a/test/redhat/catalog/catalog.go +++ b/test/redhat/catalog/catalog.go @@ -211,7 +211,7 @@ type ParsedData struct { OS string `json:"os"` Ports string `json:"ports"` // Repositories defined within an image as reported by yum command. - Repos []TODO `json:"repos"` + Repos []ParsedDataRepo `json:"repos"` // Size of this image as reported by image metadata. Size int64 `json:"size"` // Information about uncompressed layer sizes. @@ -224,6 +224,31 @@ type ParsedData struct { VirtualSize int64 `json:"virtual_size"` } +// BUG(hank) The [ParsedData.Layers] slice is backwards: the last-applied layer +// is at the 0th position. OCI types have the first-applied layer in the 0th +// position. + +// TopLayer is a helper to work around the layer notation difference. +// +// See the BUG note for more information. +func (d *ParsedData) TopLayer() string { + return d.Layers[0] +} + +// ParsedDataRepo has no description. +// +// Implements the object described at https://catalog.redhat.com/api/containers/docs/objects/ParsedDataRepo.html +type ParsedDataRepo struct { + BaseURL string `json:"baseurl"` + Expire string `json:"expire"` + Filename string `json:"filename"` + ID string `json:"id"` + Name string `json:"name"` + Packages string `json:"pkgs"` + Size string `json:"size"` + Updated string `json:"updated"` +} + // RpmManifest contains all the RPM packages for a given [Image]. // // Implements the object described at https://catalog.redhat.com/api/containers/docs/objects/ContainerImageRPMManifest.html From 2afed4710bcde55cf9a343043aadfee13e699740 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 30 Apr 2025 14:16:22 -0500 Subject: [PATCH 03/31] rpmdb: move rpm header parsing to new package Signed-off-by: Hank Donnay --- internal/rpm/rpmdb/doc.go | 9 +++ .../rpm => internal/rpm/rpmdb}/header.go | 27 ++++--- .../rpm => internal/rpm/rpmdb}/header_test.go | 2 +- .../rpm => internal/rpm/rpmdb}/rpm_tag.go | 2 +- .../rpm => internal/rpm/rpmdb}/tag_string.go | 2 +- .../rpm => internal/rpm/rpmdb}/tag_table.go | 2 +- .../rpm/rpmdb}/testdata/package.header | Bin rpm/bdb/bdb_test.go | 6 +- rpm/internal/rpm/doc.go | 6 -- rpm/native_db.go | 68 +++++++++--------- rpm/native_db_test.go | 4 +- rpm/ndb/index_test.go | 4 +- rpm/ndb/ndb.go | 14 ++-- rpm/ndb/package_test.go | 6 +- 14 files changed, 76 insertions(+), 76 deletions(-) create mode 100644 internal/rpm/rpmdb/doc.go rename {rpm/internal/rpm => internal/rpm/rpmdb}/header.go (92%) rename {rpm/internal/rpm => internal/rpm/rpmdb}/header_test.go (97%) rename {rpm/internal/rpm => internal/rpm/rpmdb}/rpm_tag.go (99%) rename {rpm/internal/rpm => internal/rpm/rpmdb}/tag_string.go (99%) rename {rpm/internal/rpm => internal/rpm/rpmdb}/tag_table.go (99%) rename {rpm/internal/rpm => internal/rpm/rpmdb}/testdata/package.header (100%) delete mode 100644 rpm/internal/rpm/doc.go diff --git a/internal/rpm/rpmdb/doc.go b/internal/rpm/rpmdb/doc.go new file mode 100644 index 000000000..d621cf7fa --- /dev/null +++ b/internal/rpm/rpmdb/doc.go @@ -0,0 +1,9 @@ +// Package rpmdb contains some internal helpers for working with RPM +// databases. +// +// The actual data stored in various databases is independent of the disk +// format, once extracted. + +// See the reference material at +// https://rpm-software-management.github.io/rpm/manual/. +package rpmdb diff --git a/rpm/internal/rpm/header.go b/internal/rpm/rpmdb/header.go similarity index 92% rename from rpm/internal/rpm/header.go rename to internal/rpm/rpmdb/header.go index 4d4ffab67..659063fc1 100644 --- a/rpm/internal/rpm/header.go +++ b/internal/rpm/rpmdb/header.go @@ -1,4 +1,4 @@ -package rpm +package rpmdb import ( "bufio" @@ -11,9 +11,6 @@ import ( "unsafe" ) -// See the reference material at -// https://rpm-software-management.github.io/rpm/manual/. - // Header is a parsed RPM header. type Header struct { tags *io.SectionReader @@ -55,7 +52,7 @@ func ParseHeader(ctx context.Context, r io.ReaderAt) (*Header, error) { // The ReaderAt must stay available throughout the lifetime of the Header. func (h *Header) Parse(ctx context.Context, r io.ReaderAt) error { if err := h.loadArenas(ctx, r); err != nil { - return fmt.Errorf("rpm: failed to parse header: %w", err) + return fmt.Errorf("rpmdb: failed to parse header: %w", err) } var isBDB bool switch err := h.verifyRegion(ctx); { @@ -63,10 +60,10 @@ func (h *Header) Parse(ctx context.Context, r io.ReaderAt) error { case errors.Is(err, errNoRegion): isBDB = true default: - return fmt.Errorf("rpm: failed to parse header: %w", err) + return fmt.Errorf("rpmdb: failed to parse header: %w", err) } if err := h.verifyInfo(ctx, isBDB); err != nil { - return fmt.Errorf("rpm: failed to parse header: %w", err) + return fmt.Errorf("rpmdb: failed to parse header: %w", err) } return nil } @@ -87,7 +84,7 @@ func (h *Header) ReadData(_ context.Context, e *EntryInfo) (interface{}, error) } b := make([]byte, e.count) if _, err := h.data.ReadAt(b, int64(e.offset)); err != nil { - return nil, fmt.Errorf("rpm: header: error reading binary: %w", err) + return nil, fmt.Errorf("rpmdb: header: error reading binary: %w", err) } return b, nil case TypeI18nString, TypeStringArray: @@ -98,7 +95,7 @@ func (h *Header) ReadData(_ context.Context, e *EntryInfo) (interface{}, error) s[i] = sc.Text() } if err := sc.Err(); err != nil { - return nil, fmt.Errorf("rpm: header: error reading string array: %w", err) + return nil, fmt.Errorf("rpmdb: header: error reading string array: %w", err) } return s, nil case TypeString: @@ -106,7 +103,7 @@ func (h *Header) ReadData(_ context.Context, e *EntryInfo) (interface{}, error) r := bufio.NewReader(io.NewSectionReader(h.data, int64(e.offset), -1)) s, err := r.ReadString(0x00) if err != nil { - return nil, fmt.Errorf("rpm: header: error reading string: %w", err) + return nil, fmt.Errorf("rpmdb: header: error reading string: %w", err) } // ReadString includes the delimiter, be sure to remove it. return s[:len(s)-1], nil @@ -118,7 +115,7 @@ func (h *Header) ReadData(_ context.Context, e *EntryInfo) (interface{}, error) b := make([]byte, 8) for i := range r { if _, err := io.ReadFull(sr, b); err != nil { - return nil, fmt.Errorf("rpm: header: error reading %T: %w", r[0], err) + return nil, fmt.Errorf("rpmdb: header: error reading %T: %w", r[0], err) } r[i] = binary.BigEndian.Uint64(b) } @@ -128,7 +125,7 @@ func (h *Header) ReadData(_ context.Context, e *EntryInfo) (interface{}, error) b := make([]byte, 4) for i := range r { if _, err := io.ReadFull(sr, b); err != nil { - return nil, fmt.Errorf("rpm: header: error reading %T: %w", r[0], err) + return nil, fmt.Errorf("rpmdb: header: error reading %T: %w", r[0], err) } r[i] = int32(binary.BigEndian.Uint32(b)) } @@ -138,7 +135,7 @@ func (h *Header) ReadData(_ context.Context, e *EntryInfo) (interface{}, error) b := make([]byte, 2) for i := range r { if _, err := io.ReadFull(sr, b); err != nil { - return nil, fmt.Errorf("rpm: header: error reading %T: %w", r[0], err) + return nil, fmt.Errorf("rpmdb: header: error reading %T: %w", r[0], err) } r[i] = int16(binary.BigEndian.Uint16(b)) } @@ -146,7 +143,7 @@ func (h *Header) ReadData(_ context.Context, e *EntryInfo) (interface{}, error) case TypeInt8: b := make([]byte, int(e.count)) if _, err := io.ReadFull(sr, b); err != nil { - return nil, fmt.Errorf("rpm: header: error reading int8: %w", err) + return nil, fmt.Errorf("rpmdb: header: error reading int8: %w", err) } // Despite byte == uint8 and uint8 being convertible to int8, this is // the only way I can figure out to avoid an extra copy or using a @@ -156,7 +153,7 @@ func (h *Header) ReadData(_ context.Context, e *EntryInfo) (interface{}, error) case TypeChar: // Char and Bin are different because they're offset differently. r := make([]byte, int(e.count)) if _, err := sr.ReadAt(r, 0); err != nil { - return nil, fmt.Errorf("rpm: header: error reading char: %w", err) + return nil, fmt.Errorf("rpmdb: header: error reading char: %w", err) } return r, nil } diff --git a/rpm/internal/rpm/header_test.go b/internal/rpm/rpmdb/header_test.go similarity index 97% rename from rpm/internal/rpm/header_test.go rename to internal/rpm/rpmdb/header_test.go index 4cc6af9f6..6f1331dd5 100644 --- a/rpm/internal/rpm/header_test.go +++ b/internal/rpm/rpmdb/header_test.go @@ -1,4 +1,4 @@ -package rpm +package rpmdb import ( "context" diff --git a/rpm/internal/rpm/rpm_tag.go b/internal/rpm/rpmdb/rpm_tag.go similarity index 99% rename from rpm/internal/rpm/rpm_tag.go rename to internal/rpm/rpmdb/rpm_tag.go index f8f358cf4..e0eddcedd 100644 --- a/rpm/internal/rpm/rpm_tag.go +++ b/internal/rpm/rpmdb/rpm_tag.go @@ -1,4 +1,4 @@ -package rpm +package rpmdb // C.f. rpm's include/rpm/rpmtag.h -- This was done by hand with some editor // scripts, but there has to be a better way. diff --git a/rpm/internal/rpm/tag_string.go b/internal/rpm/rpmdb/tag_string.go similarity index 99% rename from rpm/internal/rpm/tag_string.go rename to internal/rpm/rpmdb/tag_string.go index 135bbb1d1..28fcd1e00 100644 --- a/rpm/internal/rpm/tag_string.go +++ b/internal/rpm/rpmdb/tag_string.go @@ -1,6 +1,6 @@ // Code generated by "stringer -type Tag,Kind"; DO NOT EDIT. -package rpm +package rpmdb import "strconv" diff --git a/rpm/internal/rpm/tag_table.go b/internal/rpm/rpmdb/tag_table.go similarity index 99% rename from rpm/internal/rpm/tag_table.go rename to internal/rpm/rpmdb/tag_table.go index fab4afb0e..6e28876e2 100644 --- a/rpm/internal/rpm/tag_table.go +++ b/internal/rpm/rpmdb/tag_table.go @@ -1,4 +1,4 @@ -package rpm +package rpmdb type tagTab struct { Short string diff --git a/rpm/internal/rpm/testdata/package.header b/internal/rpm/rpmdb/testdata/package.header similarity index 100% rename from rpm/internal/rpm/testdata/package.header rename to internal/rpm/rpmdb/testdata/package.header diff --git a/rpm/bdb/bdb_test.go b/rpm/bdb/bdb_test.go index 301243858..e1c8f4a77 100644 --- a/rpm/bdb/bdb_test.go +++ b/rpm/bdb/bdb_test.go @@ -9,7 +9,7 @@ import ( "github.com/quay/zlog" - "github.com/quay/claircore/rpm/internal/rpm" + "github.com/quay/claircore/internal/rpm/rpmdb" ) func TestLoadPackage(t *testing.T) { @@ -38,13 +38,13 @@ func TestLoadPackage(t *testing.T) { } t.Logf("got %d headers", len(rds)) for _, rd := range rds { - var h rpm.Header + var h rpmdb.Header if err := h.Parse(ctx, rd); err != nil { t.Fatal(err) } var found bool for i := range h.Infos { - if h.Infos[i].Tag == rpm.TagName { + if h.Infos[i].Tag == rpmdb.TagName { v, err := h.ReadData(ctx, &h.Infos[i]) if err != nil { t.Error(err) diff --git a/rpm/internal/rpm/doc.go b/rpm/internal/rpm/doc.go deleted file mode 100644 index 20b453618..000000000 --- a/rpm/internal/rpm/doc.go +++ /dev/null @@ -1,6 +0,0 @@ -// Package rpm contains some internal helpers for working with RPM -// databases. -// -// The actual data stored in various databases is independent of the disk -// format, once extracted. -package rpm diff --git a/rpm/native_db.go b/rpm/native_db.go index 6d0578577..5bd5584a1 100644 --- a/rpm/native_db.go +++ b/rpm/native_db.go @@ -18,8 +18,8 @@ import ( "golang.org/x/crypto/openpgp/packet" "github.com/quay/claircore" + "github.com/quay/claircore/internal/rpm/rpmdb" "github.com/quay/claircore/rpm/bdb" - "github.com/quay/claircore/rpm/internal/rpm" "github.com/quay/claircore/rpm/ndb" "github.com/quay/claircore/rpm/sqlite" ) @@ -142,7 +142,7 @@ func filesFromDB(ctx context.Context, _ string, db nativeDB) ([]claircore.File, } var files []claircore.File for _, rd := range rds { - var h rpm.Header + var h rpmdb.Header if err := h.Parse(ctx, rd); err != nil { return nil, err } @@ -176,7 +176,7 @@ func packagesFromDB(ctx context.Context, pkgdb string, db nativeDB) ([]*claircor var b strings.Builder for _, rd := range rds { - var h rpm.Header + var h rpmdb.Header if err := h.Parse(ctx, rd); err != nil { return nil, err } @@ -266,8 +266,8 @@ type Info struct { } // Load populates the receiver with information extracted from the provided -// [rpm.Header]. -func (i *Info) Load(ctx context.Context, h *rpm.Header) error { +// [rpmdb.Header]. +func (i *Info) Load(ctx context.Context, h *rpmdb.Header) error { var dirname, basename []string var dirindex []int32 for idx := range h.Infos { @@ -280,33 +280,33 @@ func (i *Info) Load(ctx context.Context, h *rpm.Header) error { return err } switch e.Tag { - case rpm.TagName: + case rpmdb.TagName: i.Name = v.(string) - case rpm.TagEpoch: + case rpmdb.TagEpoch: i.Epoch = int(v.([]int32)[0]) - case rpm.TagVersion: + case rpmdb.TagVersion: i.Version = v.(string) - case rpm.TagRelease: + case rpmdb.TagRelease: i.Release = v.(string) - case rpm.TagSourceRPM: + case rpmdb.TagSourceRPM: i.SourceNEVR = v.(string) - case rpm.TagModularityLabel: + case rpmdb.TagModularityLabel: i.Module = v.(string) - case rpm.TagArch: + case rpmdb.TagArch: i.Arch = v.(string) - case rpm.TagPayloadDigestAlgo: + case rpmdb.TagPayloadDigestAlgo: i.DigestAlgo = int(v.([]int32)[0]) - case rpm.TagPayloadDigest: + case rpmdb.TagPayloadDigest: i.Digest = v.([]string)[0] - case rpm.TagSigPGP: + case rpmdb.TagSigPGP: i.Signature = v.([]byte) - case rpm.TagDirnames: + case rpmdb.TagDirnames: dirname = v.([]string) - case rpm.TagDirindexes: + case rpmdb.TagDirindexes: dirindex = v.([]int32) - case rpm.TagBasenames: + case rpmdb.TagBasenames: basename = v.([]string) - case rpm.TagFilenames: + case rpmdb.TagFilenames: // Filenames is the tag used in rpm4 -- this is a best-effort for // supporting it. for _, name := range v.([]string) { @@ -372,21 +372,21 @@ func init() { filePatterns = regexp.MustCompile(strings.Join(pat, `|`)) } -var wantTags = map[rpm.Tag]struct{}{ - rpm.TagArch: {}, - rpm.TagBasenames: {}, - rpm.TagDirindexes: {}, - rpm.TagDirnames: {}, - rpm.TagEpoch: {}, - rpm.TagFilenames: {}, - rpm.TagModularityLabel: {}, - rpm.TagName: {}, - rpm.TagPayloadDigest: {}, - rpm.TagPayloadDigestAlgo: {}, - rpm.TagRelease: {}, - rpm.TagSigPGP: {}, - rpm.TagSourceRPM: {}, - rpm.TagVersion: {}, +var wantTags = map[rpmdb.Tag]struct{}{ + rpmdb.TagArch: {}, + rpmdb.TagBasenames: {}, + rpmdb.TagDirindexes: {}, + rpmdb.TagDirnames: {}, + rpmdb.TagEpoch: {}, + rpmdb.TagFilenames: {}, + rpmdb.TagModularityLabel: {}, + rpmdb.TagName: {}, + rpmdb.TagPayloadDigest: {}, + rpmdb.TagPayloadDigestAlgo: {}, + rpmdb.TagRelease: {}, + rpmdb.TagSigPGP: {}, + rpmdb.TagSourceRPM: {}, + rpmdb.TagVersion: {}, } func constructEVR(b *strings.Builder, info *Info) string { diff --git a/rpm/native_db_test.go b/rpm/native_db_test.go index 2a6b48d89..f47b4da45 100644 --- a/rpm/native_db_test.go +++ b/rpm/native_db_test.go @@ -14,8 +14,8 @@ import ( "github.com/quay/zlog" "golang.org/x/tools/txtar" + "github.com/quay/claircore/internal/rpm/rpmdb" "github.com/quay/claircore/rpm/bdb" - "github.com/quay/claircore/rpm/internal/rpm" "github.com/quay/claircore/rpm/ndb" "github.com/quay/claircore/rpm/sqlite" ) @@ -117,7 +117,7 @@ func TestInfo(t *testing.T) { got := make(map[string][]string, len(want)) for _, rd := range rds { - var h rpm.Header + var h rpmdb.Header if err := h.Parse(ctx, rd); err != nil { t.Error(err) continue diff --git a/rpm/ndb/index_test.go b/rpm/ndb/index_test.go index 863b5f7d0..e85d75086 100644 --- a/rpm/ndb/index_test.go +++ b/rpm/ndb/index_test.go @@ -4,7 +4,7 @@ import ( "os" "testing" - "github.com/quay/claircore/rpm/internal/rpm" + "github.com/quay/claircore/internal/rpm/rpmdb" ) func TestLoadIndex(t *testing.T) { @@ -17,7 +17,7 @@ func TestLoadIndex(t *testing.T) { if err := xdb.Parse(idxf); err != nil { t.Fatal(err) } - idx, err := xdb.Index(rpm.TagName) + idx, err := xdb.Index(rpmdb.TagName) if err != nil { t.Fatal(err) } diff --git a/rpm/ndb/ndb.go b/rpm/ndb/ndb.go index 207b4f8a2..22fb81258 100644 --- a/rpm/ndb/ndb.go +++ b/rpm/ndb/ndb.go @@ -7,7 +7,7 @@ import ( "fmt" "io" - "github.com/quay/claircore/rpm/internal/rpm" + "github.com/quay/claircore/internal/rpm/rpmdb" ) var le = binary.LittleEndian @@ -36,7 +36,7 @@ func CheckMagic(_ context.Context, r io.Reader) bool { // XDB is the "xdb" a.k.a. "Index.db", the ndb mechanism for creating indexes. type XDB struct { r io.ReaderAt - lookup map[rpm.Tag]*xdbSlot + lookup map[rpmdb.Tag]*xdbSlot slot []xdbSlot xdbHeader } @@ -58,7 +58,7 @@ func (db *XDB) Parse(r io.ReaderAt) error { // Size for full pages of slots. max := (len(pg) / slotSize) - slotStart - db.lookup = make(map[rpm.Tag]*xdbSlot, max) + db.lookup = make(map[rpmdb.Tag]*xdbSlot, max) db.slot = make([]xdbSlot, max) n := 0 var x *xdbSlot @@ -67,7 +67,7 @@ func (db *XDB) Parse(r io.ReaderAt) error { if err := x.UnmarshalBinary(pg[off:]); err != nil { return err } - if x.Tag == 0 || x.Tag == rpm.TagInvalid { + if x.Tag == 0 || x.Tag == rpmdb.TagInvalid { break } db.lookup[x.Tag] = x @@ -78,7 +78,7 @@ func (db *XDB) Parse(r io.ReaderAt) error { } // Index reports the index for the specified tag. -func (db *XDB) Index(tag rpm.Tag) (*Index, error) { +func (db *XDB) Index(tag rpmdb.Tag) (*Index, error) { slot, ok := db.lookup[tag] if !ok { return nil, fmt.Errorf("ndb: no such tag %d", tag) @@ -134,7 +134,7 @@ func (h *xdbHeader) UnmarshalBinary(b []byte) error { type xdbSlot struct { Subtag uint8 - Tag rpm.Tag + Tag rpmdb.Tag StartPage uint32 PageCount uint32 } @@ -157,7 +157,7 @@ func (s *xdbSlot) UnmarshalBinary(b []byte) error { return fmt.Errorf("slot: bad magic") } s.Subtag = b[subtagOffset] - s.Tag = rpm.Tag(le.Uint32(b[tagOffset:])) + s.Tag = rpmdb.Tag(le.Uint32(b[tagOffset:])) s.StartPage = le.Uint32(b[startOffset:]) s.PageCount = le.Uint32(b[countOffset:]) return nil diff --git a/rpm/ndb/package_test.go b/rpm/ndb/package_test.go index fdf148c63..b4ce7961a 100644 --- a/rpm/ndb/package_test.go +++ b/rpm/ndb/package_test.go @@ -9,7 +9,7 @@ import ( "github.com/quay/zlog" - "github.com/quay/claircore/rpm/internal/rpm" + "github.com/quay/claircore/internal/rpm/rpmdb" ) func TestLoadPackage(t *testing.T) { @@ -38,13 +38,13 @@ func TestLoadPackage(t *testing.T) { t.Fatal("error getting AllHeaders", err) } for _, rd := range rds { - var h rpm.Header + var h rpmdb.Header if err := h.Parse(ctx, rd); err != nil { t.Fatal(err) } var found bool for i := range h.Infos { - if h.Infos[i].Tag == rpm.TagName { + if h.Infos[i].Tag == rpmdb.TagName { v, err := h.ReadData(ctx, &h.Infos[i]) if err != nil { t.Error(err) From 75933e375e3ee41bb7a508240bb59d41f6902f05 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Mon, 19 May 2025 14:42:39 -0500 Subject: [PATCH 04/31] rpmdb: add new tags Signed-off-by: Hank Donnay --- internal/rpm/rpmdb/rpm_tag.go | 23 ++++++++++++++++++++++- internal/rpm/rpmdb/tag_string.go | 27 ++++++++++++++++++++++++--- internal/rpm/rpmdb/tag_table.go | 21 +++++++++++++++++++++ 3 files changed, 67 insertions(+), 4 deletions(-) diff --git a/internal/rpm/rpmdb/rpm_tag.go b/internal/rpm/rpmdb/rpm_tag.go index e0eddcedd..7d8f1f125 100644 --- a/internal/rpm/rpmdb/rpm_tag.go +++ b/internal/rpm/rpmdb/rpm_tag.go @@ -353,6 +353,27 @@ const ( TagModularityLabel TagPayloadDigestAlt TagArchSuffix + TagSpec + TagTranslationURL + TagUpstreamReleases + TagSourceLicense // internal + TagPreUntrans + TagPostUntrans + TagPreUntransProg + TagPostUntransProg + TagPreUntransFlags + TagPostUntransFlags + TagSysusers // extension + TagBuildSystem // internal + TagBuildOption // internal + TagPayloadSize + TagPayloadSizeAlt + TagRPMFormat + TagFileMimeIndex + TagMimeDict + TagFileMimes // extension + TagPackageDigests + TagPackageDigestAlgos ) // Stealing a trick from codegen to assert some values. @@ -363,7 +384,7 @@ func _() { _ = x[TagTriggerIndex-1069] _ = x[TagNVRA-1196] _ = x[TagTriggerScriptFlags-5027] - _ = x[TagPayloadDigestAlt-5097] + _ = x[TagPackageDigestAlgos-5119] } // Kind is the Kind of data stored in a given Tag. diff --git a/internal/rpm/rpmdb/tag_string.go b/internal/rpm/rpmdb/tag_string.go index 28fcd1e00..0d17ecde5 100644 --- a/internal/rpm/rpmdb/tag_string.go +++ b/internal/rpm/rpmdb/tag_string.go @@ -319,6 +319,27 @@ func _() { _ = x[TagModularityLabel-5096] _ = x[TagPayloadDigestAlt-5097] _ = x[TagArchSuffix-5098] + _ = x[TagSpec-5099] + _ = x[TagTranslationURL-5100] + _ = x[TagUpstreamReleases-5101] + _ = x[TagSourceLicense-5102] + _ = x[TagPreUntrans-5103] + _ = x[TagPostUntrans-5104] + _ = x[TagPreUntransProg-5105] + _ = x[TagPostUntransProg-5106] + _ = x[TagPreUntransFlags-5107] + _ = x[TagPostUntransFlags-5108] + _ = x[TagSysusers-5109] + _ = x[TagBuildSystem-5110] + _ = x[TagBuildOption-5111] + _ = x[TagPayloadSize-5112] + _ = x[TagPayloadSizeAlt-5113] + _ = x[TagRPMFormat-5114] + _ = x[TagFileMimeIndex-5115] + _ = x[TagMimeDict-5116] + _ = x[TagFileMimes-5117] + _ = x[TagPackageDigests-5118] + _ = x[TagPackageDigestAlgos-5119] } const ( @@ -331,7 +352,7 @@ const ( _Tag_name_6 = "TagNameTagVersionTagReleaseTagEpochTagSummaryTagDescriptionTagBuildTimeTagBuildHostTagInstallTimeTagSizeTagDistributionTagVendorTagGIFTagXPMTagLicenseTagPackagerTagGroupTagChangelogTagSourceTagPatchTagURLTagOSTagArchTagPreInstallTagPostInstallTagPreUninstallTagPostUninstallTagOldFilenamesTagFileSizesTagFileStatesTagFileModesTagFileUidsTagFileGidsTagFileRDevsTagFileMTimesTagFileDigestsTagFileLinkTosTagFileFlagsTagRootTagFileUsernameTagFileGroupnameTagExcludeTagExclusiveTagIconTagSourceRPMTagFileVerifyFlagsTagArchiveSizeTagProvideNameTagRequireFlagsTagRequireNameTagRequireVersionTagNoSourceTagNoPatchTagConflictFlagsTagConflictNameTagConflictVersionTagDefaultPrefixTagBuildRootTagInstallPrefixTagExcludeArchTagExcludeOSTagExclusiveArchTagExclusiveOSTagAutoReqProvTagRPMVersionTagTriggerScriptsTagTriggerNameTagTriggerVersionTagTriggerFlagsTagTriggerIndex" _Tag_name_7 = "TagVerifyScriptTagChangelogTimeTagChangelogNameTagChangelogTextTagBrokenMD5TagPreReqTagPreInstallProgTagPostInstallProgTagPreUninstallProgTagPostUninstallProgTagBuildArchsTagObsoleteNameTagVerifyScriptProgTagTriggerScriptProgTagDocDirTagCookieTagFileDevicesTagFileInodesTagFileLangsTagPrefixesTagInstallPrefixesTagTriggerInstallTagTriggerUninstallTagTriggerPostUninstallTagAutoReqTagAutoProvTagCapabilityTagSourcePackageTagOldOriginalFilenamesTagBuildPreReqTagBuildRequiresTagBuildConflictsTagBuildMacrosTagProvideFlagsTagProvideVersionTagObsoleteFlagsTagObsoleteVersionTagDirindexesTagBasenamesTagDirnamesTagOrigDirindexesTagOrigBasenamesTagOrigDirnamesTagOptFlagsTagDistURLTagPayloadFormatTagPayloadCompressorTagPayloadFlagsTagInstallColorTagInstallTIDTagRemoveTIDTagSHA1RHNTagRHNPlatformTagPlatformTagPatchesNameTagPatchesFlagsTagPatchesVersionTagCacheCtimeTagCachePkgPathTagCachePkgSizeTagCachePkgMtimeTagFileColorsTagFileClassTagClassDictTagFileDependsXTagFileDependsNTagDependsDictTagSourcePkgIDTagFileContextsTagFSContextsTagREContextsTagPoliciesTagPreTransTagPostTransTagPreTransProgTagPostTransProgTagDistTagTagOldSuggestsNameTagOldSuggestsVersionTagOldSuggestsFlagsTagOldEnhancesNameTagOldEnhancesVersionTagOldEnhancesFlagsTagPriorityTagCVSIDTagBLinkPkgIDTagBLinkHdrIDTagBLinkNEVRATagFLinkPkgIDTagFLinkHdrIDTagFLinkNEVRATagPackageOriginTagTriggerPreInstallTagBuildSuggestsTagBuildEnhancesTagScriptStatesTagScriptMetricsTagBuildCPUClockTagFileDigestAlgosTagVariantsTagXMajorTagXMinorTagRepoTagTagKeywordsTagBuildPlatformsTagPackageColorTagPackagePrefColorTagXAttrsDictTagFileXAttrsxTagDepAttrsDictTagConflictAttrsXTagObsoleteAttrsXTagProvideAttrsXTagRequireAttrsXTagBuildProvidesTagBuildObsoletesTagDbInstanceTagNVRA" _Tag_name_8 = "TagFilenamesTagFileProvideTagFileRequireTagFsNamesTagFsFizesTagTriggerCondsTagTriggerTypeTagOrigFileNamesTagLongFileSizesTagLongSizeTagFileCapsTagFileDigestAlgoTagBugURLTagEVRTagNVRTagNEVRTagNEVRATagHeaderColorTagVerboseTagEpochNumTagPreInstallFlagsTagPostInstallFlagsTagPreUninstallFlagsTagPostUninstallFlagsTagPreTransFlagsTagPostTransFlagsTagVerifyScriptFlagsTagTriggerScriptFlags" - _Tag_name_9 = "TagCollectionsTagPolicyNamesTagPolicyTypesTagPolicyTypesIndexesTagPolicyFlagsTagVCSTagOrderNameTagOrderVersionTagOrderFlagsTagMSSFManifestTagMSSFDomainTagInstFilenamesTagRequireNEVRSTagProvideNEVRSTagObsoleteNEVRSTagConflictNEVRSTagFileNLinksTagRecommendNameTagRecommendVersionTagRecommendFlagsTagSuggestNameTagSuggestVersionTagSuggestFlagsTagSupplementNameTagSupplementVersionTagSupplementFlagsTagEnhanceNameTagEnhanceVersionTagEnhanceFlagsTagRecommendNEVRSTagSuggestNEVRSTagSupplementNEVRSTagEnhanceNEVRSTagEncodingTagFileTriggerInstallTagFileTriggerUninstallTagFileTriggerPostUninstallTagFileTriggerScriptsTagFileTriggerScriptProgTagFileTriggerScriptFlagsTagFileTriggerNameTagFileTriggerIndexTagFileTriggerVersionTagFileTriggerFlagsTagTransFileTriggerInstallTagTransFileTriggerUninstallTagTransFileTriggerPostUninstallTagTransFileTriggerScriptsTagTransFileTriggerScriptProgTagTransFileTriggerScriptFlagsTagTransFileTriggerNameTagTransFileTriggerIndexTagTransFileTriggerVersionTagTransFileTriggerFlagsTagRemovePathPostFixesTagFileTriggerPrioritiesTagTransFileTriggerPrioritiesTagFileTriggerCondsTagFileTriggerTypeTagTransFileTriggerCondsTagTransFileTriggerTypeTagFileSignaturesTagFileSignatureLengthTagPayloadDigestTagPayloadDigestAlgoTagAutoInstalledTagIdentityTagModularityLabelTagPayloadDigestAltTagArchSuffix" + _Tag_name_9 = "TagCollectionsTagPolicyNamesTagPolicyTypesTagPolicyTypesIndexesTagPolicyFlagsTagVCSTagOrderNameTagOrderVersionTagOrderFlagsTagMSSFManifestTagMSSFDomainTagInstFilenamesTagRequireNEVRSTagProvideNEVRSTagObsoleteNEVRSTagConflictNEVRSTagFileNLinksTagRecommendNameTagRecommendVersionTagRecommendFlagsTagSuggestNameTagSuggestVersionTagSuggestFlagsTagSupplementNameTagSupplementVersionTagSupplementFlagsTagEnhanceNameTagEnhanceVersionTagEnhanceFlagsTagRecommendNEVRSTagSuggestNEVRSTagSupplementNEVRSTagEnhanceNEVRSTagEncodingTagFileTriggerInstallTagFileTriggerUninstallTagFileTriggerPostUninstallTagFileTriggerScriptsTagFileTriggerScriptProgTagFileTriggerScriptFlagsTagFileTriggerNameTagFileTriggerIndexTagFileTriggerVersionTagFileTriggerFlagsTagTransFileTriggerInstallTagTransFileTriggerUninstallTagTransFileTriggerPostUninstallTagTransFileTriggerScriptsTagTransFileTriggerScriptProgTagTransFileTriggerScriptFlagsTagTransFileTriggerNameTagTransFileTriggerIndexTagTransFileTriggerVersionTagTransFileTriggerFlagsTagRemovePathPostFixesTagFileTriggerPrioritiesTagTransFileTriggerPrioritiesTagFileTriggerCondsTagFileTriggerTypeTagTransFileTriggerCondsTagTransFileTriggerTypeTagFileSignaturesTagFileSignatureLengthTagPayloadDigestTagPayloadDigestAlgoTagAutoInstalledTagIdentityTagModularityLabelTagPayloadDigestAltTagArchSuffixTagSpecTagTranslationURLTagUpstreamReleasesTagSourceLicenseTagPreUntransTagPostUntransTagPreUntransProgTagPostUntransProgTagPreUntransFlagsTagPostUntransFlagsTagSysusersTagBuildSystemTagBuildOptionTagPayloadSizeTagPayloadSizeAltTagRPMFormatTagFileMimeIndexTagMimeDictTagFileMimesTagPackageDigestsTagPackageDigestAlgos" ) var ( @@ -341,7 +362,7 @@ var ( _Tag_index_6 = [...]uint16{0, 7, 17, 27, 35, 45, 59, 71, 83, 97, 104, 119, 128, 134, 140, 150, 161, 169, 181, 190, 198, 204, 209, 216, 229, 243, 258, 274, 289, 301, 314, 326, 337, 348, 360, 373, 387, 401, 413, 420, 435, 451, 461, 473, 480, 492, 510, 524, 538, 553, 567, 584, 595, 605, 621, 636, 654, 670, 682, 698, 712, 724, 740, 754, 768, 781, 798, 812, 829, 844, 859} _Tag_index_7 = [...]uint16{0, 15, 31, 47, 63, 75, 84, 101, 119, 138, 158, 171, 186, 205, 225, 234, 243, 257, 270, 282, 293, 311, 328, 347, 370, 380, 391, 404, 420, 443, 457, 473, 490, 504, 519, 536, 552, 570, 583, 595, 606, 623, 639, 654, 665, 675, 691, 711, 726, 741, 754, 766, 776, 790, 801, 815, 830, 847, 860, 875, 890, 906, 919, 931, 943, 958, 973, 987, 1001, 1016, 1029, 1042, 1053, 1064, 1076, 1091, 1107, 1117, 1135, 1156, 1175, 1193, 1214, 1233, 1244, 1252, 1265, 1278, 1291, 1304, 1317, 1330, 1346, 1366, 1382, 1398, 1413, 1429, 1445, 1463, 1474, 1483, 1492, 1502, 1513, 1530, 1545, 1564, 1577, 1591, 1606, 1623, 1640, 1656, 1672, 1688, 1705, 1718, 1725} _Tag_index_8 = [...]uint16{0, 12, 26, 40, 50, 60, 75, 89, 105, 121, 132, 143, 160, 169, 175, 181, 188, 196, 210, 220, 231, 249, 268, 288, 309, 325, 342, 362, 383} - _Tag_index_9 = [...]uint16{0, 14, 28, 42, 63, 77, 83, 95, 110, 123, 138, 151, 167, 182, 197, 213, 229, 242, 258, 277, 294, 308, 325, 340, 357, 377, 395, 409, 426, 441, 458, 473, 491, 506, 517, 538, 561, 588, 609, 633, 658, 676, 695, 716, 735, 761, 789, 821, 847, 876, 906, 929, 953, 979, 1003, 1025, 1049, 1078, 1097, 1115, 1139, 1162, 1179, 1201, 1217, 1237, 1253, 1264, 1282, 1301, 1314} + _Tag_index_9 = [...]uint16{0, 14, 28, 42, 63, 77, 83, 95, 110, 123, 138, 151, 167, 182, 197, 213, 229, 242, 258, 277, 294, 308, 325, 340, 357, 377, 395, 409, 426, 441, 458, 473, 491, 506, 517, 538, 561, 588, 609, 633, 658, 676, 695, 716, 735, 761, 789, 821, 847, 876, 906, 929, 953, 979, 1003, 1025, 1049, 1078, 1097, 1115, 1139, 1162, 1179, 1201, 1217, 1237, 1253, 1264, 1282, 1301, 1314, 1321, 1338, 1357, 1373, 1386, 1400, 1417, 1435, 1453, 1472, 1483, 1497, 1511, 1525, 1542, 1554, 1570, 1581, 1593, 1610, 1631} ) func (i Tag) String() string { @@ -370,7 +391,7 @@ func (i Tag) String() string { case 5000 <= i && i <= 5027: i -= 5000 return _Tag_name_8[_Tag_index_8[i]:_Tag_index_8[i+1]] - case 5029 <= i && i <= 5098: + case 5029 <= i && i <= 5119: i -= 5029 return _Tag_name_9[_Tag_index_9[i]:_Tag_index_9[i+1]] default: diff --git a/internal/rpm/rpmdb/tag_table.go b/internal/rpm/rpmdb/tag_table.go index 6e28876e2..79acbde60 100644 --- a/internal/rpm/rpmdb/tag_table.go +++ b/internal/rpm/rpmdb/tag_table.go @@ -240,6 +240,27 @@ var tagTable = [...]tagTab{ {"Modularitylabel", TagModularityLabel, TypeString, returnScalar, false}, {"Payloaddigestalt", TagPayloadDigestAlt, TypeStringArray, returnArray, false}, {"Archsuffix", TagArchSuffix, TypeString, returnScalar, true}, + {"Spec", TagSpec, TypeString, returnScalar, false}, + {"Translationurl", TagTranslationURL, TypeString, returnScalar, false}, + {"Upstreamreleases", TagUpstreamReleases, TypeString, returnScalar, false}, + {"Sourcelicense", TagSourceLicense, TypeString, returnScalar, false}, + {"Preuntrans", TagPreUntrans, TypeString, returnScalar, false}, + {"Postuntrans", TagPostUntrans, TypeString, returnScalar, false}, + {"Preuntransprog", TagPreUntransProg, TypeString, returnArray, false}, + {"Postuntransprog", TagPostUntransProg, TypeString, returnArray, false}, + {"Preuntransflags", TagPreUntransFlags, TypeInt32, returnScalar, false}, + {"Postuntransflags", TagPostUntransFlags, TypeInt32, returnScalar, false}, + {"Sysusers", TagSysusers, TypeString, returnArray, true}, + {"Buildsystem", TagBuildSystem, TypeString, returnScalar, false}, + {"Buildoption", TagBuildOption, TypeString, returnScalar, false}, + {"Payloadsize", TagPayloadSize, TypeInt64, returnScalar, false}, + {"Payloadsizealt", TagPayloadSizeAlt, TypeInt64, returnScalar, false}, + {"Rpmformat", TagRPMFormat, TypeInt32, returnScalar, false}, + {"Filemimeindex", TagFileMimeIndex, TypeInt32, returnArray, false}, + {"Mimedict", TagMimeDict, TypeString, returnArray, false}, + {"Filemimes", TagFileMimes, TypeString, returnArray, true}, + {"Packagedigests", TagPackageDigests, TypeString, returnArray, false}, + {"Packagedigestalgos", TagPackageDigestAlgos, TypeInt32, returnArray, false}, } var tagByValue map[Tag]int From 292c0c3ffd5f13737d5d748ccdeedde9ebcc05a8 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 30 Apr 2025 14:32:45 -0500 Subject: [PATCH 05/31] ndb: add package header iterator Signed-off-by: Hank Donnay --- rpm/ndb/package.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/rpm/ndb/package.go b/rpm/ndb/package.go index 799de7e2d..cb2434ed8 100644 --- a/rpm/ndb/package.go +++ b/rpm/ndb/package.go @@ -6,6 +6,7 @@ import ( "fmt" "hash/adler32" "io" + "iter" ) // Pages are hard-coded to 4096 bytes for the Package database; this @@ -67,6 +68,18 @@ func (db *PackageDB) Parse(r io.ReaderAt) error { return nil } +// Headers returns an iterator over all the header blobs in the database. +func (db *PackageDB) Headers(_ context.Context) iter.Seq2[io.ReaderAt, error] { + return func(yield func(io.ReaderAt, error) bool) { + for _, s := range db.slot { + r, err := db.GetHeader(s.Index) + if !yield(r, err) { + return + } + } + } +} + // AllHeaders returns ReaderAts for all RPM headers in the PackageDB. func (db *PackageDB) AllHeaders(_ context.Context) ([]io.ReaderAt, error) { r := make([]io.ReaderAt, len(db.slot)) From db7f4e5c5f0ffa74864a8bb788fd656bb910a6f5 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 30 Apr 2025 14:57:43 -0500 Subject: [PATCH 06/31] bdb: add package header iterator Signed-off-by: Hank Donnay --- rpm/bdb/bdb.go | 158 ++++++++++++++++++++++++++++++------------------- 1 file changed, 96 insertions(+), 62 deletions(-) diff --git a/rpm/bdb/bdb.go b/rpm/bdb/bdb.go index c8e2714fa..0b942cde0 100644 --- a/rpm/bdb/bdb.go +++ b/rpm/bdb/bdb.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "io" + "iter" "github.com/quay/zlog" ) @@ -168,82 +169,115 @@ type hashoffpage struct { Length uint32 /* 08-11: Total length of item. */ } -// AllHeaders returns ReaderAts for all RPM headers in the PackageDB. -func (db *PackageDB) AllHeaders(ctx context.Context) ([]io.ReaderAt, error) { - var ret []io.ReaderAt +// Headers returns an iterator over all RPM headers in the PackageDB. +func (db *PackageDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] { pageSz := int64(db.m.PageSize) - for n, lim := int64(0), int64(db.m.LastPageNo)+1; n < lim; n++ { - pg := io.NewSectionReader(db.r, n*pageSz, pageSz) - var h hashpage - if err := binary.Read(pg, db.ord, &h); err != nil { - return nil, fmt.Errorf("bdb: error reading hashpage: %w", err) - } - if h.Type != pagetypeHashUnsorted && h.Type != pagetypeHash { - continue - } - if h.Entries%2 != 0 { - return nil, errors.New("bdb: odd number of entries") - } - - ent := make([]hashentry, int(h.Entries)/2) - for i := range ent { - if err := binary.Read(pg, db.ord, &ent[i]); err != nil { - return nil, fmt.Errorf("bdb: error reading hash entry: %w", err) - } - } - - k := []byte{0x00} - for _, e := range ent { - off := int64(e.Data) - // First, check what kind of hash entry this is. - view := io.NewSectionReader(pg, off, hashoffpageSize) - if _, err := view.ReadAt(k, 0); err != nil { - return nil, fmt.Errorf("bdb: error peeking page type: %w", err) + return func(yield func(io.ReaderAt, error) bool) { + for n, lim := int64(0), int64(db.m.LastPageNo)+1; n < lim; n++ { + pg := io.NewSectionReader(db.r, n*pageSz, pageSz) + var h hashpage + if err := binary.Read(pg, db.ord, &h); err != nil { + if !yield(nil, fmt.Errorf("bdb: error reading hashpage: %w", err)) { + return + } } - if k[0] != pagetypeHashOffIndex { + if h.Type != pagetypeHashUnsorted && h.Type != pagetypeHash { continue } - // Read the page header, now that we know it's correct. - var offpg hashoffpage - if err := binary.Read(view, db.ord, &offpg); err != nil { - return nil, fmt.Errorf("bdb: error reading hashoffpage: %w", err) + if h.Entries%2 != 0 { + if !yield(nil, errors.New("bdb: odd number of entries")) { + return + } } - var r rope - for n := offpg.PageNo; n != 0; { - off := pageSz * int64(n) - pg := io.NewSectionReader(db.r, off, pageSz) - var h hashpage - if err := binary.Read(pg, db.ord, &h); err != nil { - return nil, fmt.Errorf("bdb: error reading hashpage: %w", err) + + ent := make([]hashentry, int(h.Entries)/2) + for i := range ent { + if err := binary.Read(pg, db.ord, &ent[i]); err != nil { + if !yield(nil, fmt.Errorf("bdb: error reading hash entry: %w", err)) { + return + } } - if h.Type != pagetypeOverflow { + } + + k := []byte{0x00} + for _, e := range ent { + off := int64(e.Data) + // First, check what kind of hash entry this is. + view := io.NewSectionReader(pg, off, hashoffpageSize) + if _, err := view.ReadAt(k, 0); err != nil { + if !yield(nil, fmt.Errorf("bdb: error peeking page type: %w", err)) { + return + } + } + if k[0] != pagetypeHashOffIndex { continue } - off += hashpageSize + // Read the page header, now that we know it's correct. + var offpg hashoffpage + if err := binary.Read(view, db.ord, &offpg); err != nil { + if !yield(nil, fmt.Errorf("bdb: error reading hashoffpage: %w", err)) { + return + } + } + var r rope + for n := offpg.PageNo; n != 0; { + off := pageSz * int64(n) + pg := io.NewSectionReader(db.r, off, pageSz) + var h hashpage + if err := binary.Read(pg, db.ord, &h); err != nil { + if !yield(nil, fmt.Errorf("bdb: error reading hashpage: %w", err)) { + return + } + } + if h.Type != pagetypeOverflow { + continue + } + off += hashpageSize - var data *io.SectionReader - if h.NextPageNo == 0 { - // If this is the last page, only read to the end. - data = io.NewSectionReader(db.r, off, int64(h.HighFreeOffset)) - } else { - data = io.NewSectionReader(db.r, off, pageSz-hashpageSize) + var data *io.SectionReader + if h.NextPageNo == 0 { + // If this is the last page, only read to the end. + data = io.NewSectionReader(db.r, off, int64(h.HighFreeOffset)) + } else { + data = io.NewSectionReader(db.r, off, pageSz-hashpageSize) + } + if err := r.add(data); err != nil { + if !yield(nil, fmt.Errorf("bdb: error adding to rope: %w", err)) { + return + } + } + n = h.NextPageNo } - if err := r.add(data); err != nil { - return nil, fmt.Errorf("bdb: error adding to rope: %w", err) + // Double-check we'll read the intended amount. + if got, want := r.Size(), int64(offpg.Length); got != want { + zlog.Info(ctx). + Int64("got", got). + Int64("want", want). + Msg("bdb: expected data length botch") + } + + if !yield(&r, nil) { + return } - n = h.NextPageNo - } - // Double-check we'll read the intended amount. - if got, want := r.Size(), int64(offpg.Length); got != want { - zlog.Info(ctx). - Int64("got", got). - Int64("want", want). - Msg("bdb: expected data length botch") } - ret = append(ret, &r) } } - return ret, nil +} + +func tryCollect[T any](seq iter.Seq2[T, error]) ([]T, error) { + var slice []T + for v, err := range seq { + if err != nil { + return nil, err + } + slice = append(slice, v) + } + return slice, nil +} + +// AllHeaders returns ReaderAts for all RPM headers in the PackageDB. +func (db *PackageDB) AllHeaders(ctx context.Context) ([]io.ReaderAt, error) { + return tryCollect(db.Headers(ctx)) } // Validate is currently here to fulfill an interface. From fc0cbac375a53c4cdcf85a3f521fba789b29d800 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 30 Apr 2025 15:40:11 -0500 Subject: [PATCH 07/31] sqlite: add package header iterator Signed-off-by: Hank Donnay --- rpm/sqlite/sqlite.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/rpm/sqlite/sqlite.go b/rpm/sqlite/sqlite.go index 2fa42a6ac..dbd8c2dd7 100644 --- a/rpm/sqlite/sqlite.go +++ b/rpm/sqlite/sqlite.go @@ -9,6 +9,7 @@ import ( "errors" "fmt" "io" + "iter" "net/url" "runtime" @@ -63,6 +64,37 @@ func (db *RPMDB) Close() error { return db.db.Close() } +// Headers returns all RPM headers in the database. +func (db *RPMDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] { + // Keys are sorted coming out of this query. + rows, err := db.db.QueryContext(ctx, allpackages) + return func(yield func(io.ReaderAt, error) bool) { + if err != nil { + yield(nil, err) + return + } + defer rows.Close() + var hnum int64 + for rows.Next() { + blob := make([]byte, 0, 4096) // Eyeballing a good initial capacity; do some profiling. + // As an alternative, this function could allocate one large buffer and subslice it for each + // Scan call, then use io.SectionReaders for the returned []io.ReaderAt. + if err := rows.Scan(&hnum, &blob); err != nil { + if !yield(nil, fmt.Errorf("sqlite: scan error: %w", err)) { + return + } + continue + } + if !yield(bytes.NewReader(blob), nil) { + return + } + } + if err := rows.Err(); err != nil { + yield(nil, fmt.Errorf("sqlite: sql error: %w", err)) + } + } +} + // AllHeaders returns ReaderAts for all RPM headers in the database. func (db *RPMDB) AllHeaders(ctx context.Context) ([]io.ReaderAt, error) { // Keys are sorted coming out of this query. From f4359c26fe6e990346a7a69216a31e8fa1352917 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Thu, 1 May 2025 11:04:11 -0500 Subject: [PATCH 08/31] rpm: reorganize `Info`, fs walking code Signed-off-by: Hank Donnay --- rpm/find.go | 82 ++++++++++++++++++ rpm/info.go | 220 +++++++++++++++++++++++++++++++++++++++++++++++ rpm/native_db.go | 212 --------------------------------------------- 3 files changed, 302 insertions(+), 212 deletions(-) create mode 100644 rpm/find.go create mode 100644 rpm/info.go diff --git a/rpm/find.go b/rpm/find.go new file mode 100644 index 000000000..5d7b91ff5 --- /dev/null +++ b/rpm/find.go @@ -0,0 +1,82 @@ +package rpm + +import ( + "context" + "io/fs" + "path" + + "github.com/quay/claircore/rpm/bdb" + "github.com/quay/claircore/rpm/ndb" +) + +func findDBs(ctx context.Context, out *[]foundDB, sys fs.FS) fs.WalkDirFunc { + return func(p string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() { + return nil + } + + dir, n := path.Split(p) + dir = path.Clean(dir) + switch n { + case `Packages`: + f, err := sys.Open(p) + if err != nil { + return err + } + ok := bdb.CheckMagic(ctx, f) + f.Close() + if !ok { + return nil + } + *out = append(*out, foundDB{ + Path: dir, + Kind: kindBDB, + }) + case `rpmdb.sqlite`: + *out = append(*out, foundDB{ + Path: dir, + Kind: kindSQLite, + }) + case `Packages.db`: + f, err := sys.Open(p) + if err != nil { + return err + } + ok := ndb.CheckMagic(ctx, f) + f.Close() + if !ok { + return nil + } + *out = append(*out, foundDB{ + Path: dir, + Kind: kindNDB, + }) + } + return nil + } +} + +type dbKind uint + +//go:generate -command stringer go run golang.org/x/tools/cmd/stringer +//go:generate stringer -linecomment -type dbKind + +const ( + _ dbKind = iota + + kindBDB // bdb + kindSQLite // sqlite + kindNDB // ndb +) + +type foundDB struct { + Path string + Kind dbKind +} + +func (f foundDB) String() string { + return f.Kind.String() + ":" + f.Path +} diff --git a/rpm/info.go b/rpm/info.go new file mode 100644 index 000000000..28875cfaa --- /dev/null +++ b/rpm/info.go @@ -0,0 +1,220 @@ +package rpm + +import ( + "bytes" + "context" + "fmt" + "net/url" + "path" + "regexp" + "strconv" + "strings" + + "github.com/quay/zlog" + "golang.org/x/crypto/openpgp/packet" + + "github.com/quay/claircore/internal/rpm/rpmdb" + "github.com/quay/claircore/internal/rpmver" +) + +// Info is the package information extracted from the RPM header. +type Info struct { + Name string + Version string + Release string + SourceNEVR string + Module string + Arch string + Digest string + Signature []byte // This is a PGP signature packet. + Filenames []string // Filtered by the [filePatterns] regexp. + DigestAlgo int + Epoch int +} + +// Load populates the receiver with information extracted from the provided +// [rpmdb.Header]. +func (i *Info) Load(ctx context.Context, h *rpmdb.Header) error { + var dirname, basename []string + var dirindex []int32 + for idx := range h.Infos { + e := &h.Infos[idx] + if _, ok := wantTags[e.Tag]; !ok { + continue + } + v, err := h.ReadData(ctx, e) + if err != nil { + return err + } + switch e.Tag { + case rpmdb.TagName: + i.Name = v.(string) + case rpmdb.TagEpoch: + i.Epoch = int(v.([]int32)[0]) + case rpmdb.TagVersion: + i.Version = v.(string) + case rpmdb.TagRelease: + i.Release = v.(string) + case rpmdb.TagSourceRPM: + i.SourceNEVR = v.(string) + case rpmdb.TagModularityLabel: + i.Module = v.(string) + case rpmdb.TagArch: + i.Arch = v.(string) + case rpmdb.TagPayloadDigestAlgo: + i.DigestAlgo = int(v.([]int32)[0]) + case rpmdb.TagPayloadDigest: + i.Digest = v.([]string)[0] + case rpmdb.TagSigPGP: + i.Signature = v.([]byte) + case rpmdb.TagDirnames: + dirname = v.([]string) + case rpmdb.TagDirindexes: + dirindex = v.([]int32) + case rpmdb.TagBasenames: + basename = v.([]string) + case rpmdb.TagFilenames: + // Filenames is the tag used in rpm4 -- this is a best-effort for + // supporting it. + for _, name := range v.([]string) { + if !filePatterns.MatchString(name) { + // Record the name as a relative path, as that's what we use + // everywhere else. + i.Filenames = append(i.Filenames, name[1:]) + } + } + } + } + + // Catch panics from malformed headers. Can't think of a better way to + // handle this. + defer func() { + if r := recover(); r == nil { + return + } + zlog.Warn(ctx). + Str("name", i.Name). + Strs("basename", basename). + Strs("dirname", dirname). + Ints32("dirindex", dirindex). + Msg("caught panic in filename construction") + i.Filenames = nil + }() + for j := range basename { + // We only want '/'-separated paths, even if running on some other, + // weird OS. It seems that RPM assumes '/' throughout. + name := path.Join(dirname[dirindex[j]], basename[j]) + if filePatterns.MatchString(name) { + // Record the name as a relative path, as that's what we use + // everywhere else. + i.Filenames = append(i.Filenames, name[1:]) + } + } + return nil +} + +// NEVRA constructs a Name-Epoch-Version-Release-Architecture [rpmver.Version]. +func (i *Info) NEVRA() rpmver.Version { + return rpmver.Version{ + Name: &([]string{i.Name})[0], + Architecture: &([]string{i.Arch})[0], + Epoch: strconv.Itoa(i.Epoch), + Version: i.Version, + Release: i.Release, + } +} + +// Hint constructs a string suitable to be use as the "RepositoryHint". +func (i *Info) Hint() string { + v := url.Values{} + if i.Digest != "" { + switch i.DigestAlgo { + case 8: + v.Set("hash", "sha256:"+i.Digest) + } + } + if len(i.Signature) != 0 { + prd := packet.NewReader(bytes.NewReader(i.Signature)) + p, err := prd.Next() + for ; err == nil; p, err = prd.Next() { + switch p := p.(type) { + case *packet.SignatureV3: + if p.SigType != 0 { + continue + } + v.Set("key", fmt.Sprintf("%016x", p.IssuerKeyId)) + case *packet.Signature: + if p.SigType != 0 || p.IssuerKeyId == nil { + continue + } + v.Set("key", fmt.Sprintf("%016x", *p.IssuerKeyId)) + } + } + } + return v.Encode() +} + +// ModuleStream reports the module and stream from the full module version. +// +// It returns the empty string if the [Info] does not describe a package from a +// module. +func (i *Info) ModuleStream() string { + if strings.Count(i.Module, ":") <= 1 { + return "" + } + first := true + idx := strings.IndexFunc(i.Module, func(r rune) bool { + if r != ':' { + return false + } + if first { + first = false + return false + } + return true + }) + return i.Module[:idx] +} + +// FilePatterns is a regular expression for *any* file that may need to be +// recorded alongside a package. +// +// The tested strings are absolute paths. +var filePatterns *regexp.Regexp + +func init() { + // TODO(hank) The blanket binary pattern is too broad and can miss things. + // Long-term, we should add pattern matching akin to [yara] or file(1) as a + // plugin mechanism that all indexers can use. That way, the Go indexer + // could register a pattern and use a shared filter over the + // [fs.WalkDirFunc] while this package (and dpkg, etc) can tell that another + // indexer will find those files relevant. + // + // [yara]: https://github.com/VirusTotal/yara + pat := []string{ + `^.*/[^/]+\.jar$`, // Jar files + `^.*/site-packages/[^/]+\.egg-info/PKG-INFO$`, // Python packages + `^.*/package.json$`, // npm packages + `^.*/[^/]+\.gemspec$`, // ruby gems + `^/usr/s?bin/[^/]+$`, // any executable + "^/usr/libexec/[^/]+/[^/]+$", // sometimes the executables are here too + } + filePatterns = regexp.MustCompile(strings.Join(pat, `|`)) +} + +var wantTags = map[rpmdb.Tag]struct{}{ + rpmdb.TagArch: {}, + rpmdb.TagBasenames: {}, + rpmdb.TagDirindexes: {}, + rpmdb.TagDirnames: {}, + rpmdb.TagEpoch: {}, + rpmdb.TagFilenames: {}, + rpmdb.TagModularityLabel: {}, + rpmdb.TagName: {}, + rpmdb.TagPayloadDigest: {}, + rpmdb.TagPayloadDigestAlgo: {}, + rpmdb.TagRelease: {}, + rpmdb.TagSigPGP: {}, + rpmdb.TagSourceRPM: {}, + rpmdb.TagVersion: {}, +} diff --git a/rpm/native_db.go b/rpm/native_db.go index 5bd5584a1..e4030afaf 100644 --- a/rpm/native_db.go +++ b/rpm/native_db.go @@ -10,7 +10,6 @@ import ( "net/url" "os" "path" - "regexp" "runtime/trace" "strings" @@ -250,145 +249,6 @@ func packagesFromDB(ctx context.Context, pkgdb string, db nativeDB) ([]*claircor return pkgs, nil } -// Info is the package information extracted from the RPM header. -type Info struct { - Name string - Version string - Release string - SourceNEVR string - Module string - Arch string - Digest string - Signature []byte // This is a PGP signature packet. - Filenames []string // Filtered by the [filePatterns] regexp. - DigestAlgo int - Epoch int -} - -// Load populates the receiver with information extracted from the provided -// [rpmdb.Header]. -func (i *Info) Load(ctx context.Context, h *rpmdb.Header) error { - var dirname, basename []string - var dirindex []int32 - for idx := range h.Infos { - e := &h.Infos[idx] - if _, ok := wantTags[e.Tag]; !ok { - continue - } - v, err := h.ReadData(ctx, e) - if err != nil { - return err - } - switch e.Tag { - case rpmdb.TagName: - i.Name = v.(string) - case rpmdb.TagEpoch: - i.Epoch = int(v.([]int32)[0]) - case rpmdb.TagVersion: - i.Version = v.(string) - case rpmdb.TagRelease: - i.Release = v.(string) - case rpmdb.TagSourceRPM: - i.SourceNEVR = v.(string) - case rpmdb.TagModularityLabel: - i.Module = v.(string) - case rpmdb.TagArch: - i.Arch = v.(string) - case rpmdb.TagPayloadDigestAlgo: - i.DigestAlgo = int(v.([]int32)[0]) - case rpmdb.TagPayloadDigest: - i.Digest = v.([]string)[0] - case rpmdb.TagSigPGP: - i.Signature = v.([]byte) - case rpmdb.TagDirnames: - dirname = v.([]string) - case rpmdb.TagDirindexes: - dirindex = v.([]int32) - case rpmdb.TagBasenames: - basename = v.([]string) - case rpmdb.TagFilenames: - // Filenames is the tag used in rpm4 -- this is a best-effort for - // supporting it. - for _, name := range v.([]string) { - if !filePatterns.MatchString(name) { - // Record the name as a relative path, as that's what we use - // everywhere else. - i.Filenames = append(i.Filenames, name[1:]) - } - } - } - } - - // Catch panics from malformed headers. Can't think of a better way to - // handle this. - defer func() { - if r := recover(); r == nil { - return - } - zlog.Warn(ctx). - Str("name", i.Name). - Strs("basename", basename). - Strs("dirname", dirname). - Ints32("dirindex", dirindex). - Msg("caught panic in filename construction") - i.Filenames = nil - }() - for j := range basename { - // We only want '/'-separated paths, even if running on some other, - // weird OS. It seems that RPM assumes '/' throughout. - name := path.Join(dirname[dirindex[j]], basename[j]) - if filePatterns.MatchString(name) { - // Record the name as a relative path, as that's what we use - // everywhere else. - i.Filenames = append(i.Filenames, name[1:]) - } - } - return nil -} - -// FilePatterns is a regular expression for *any* file that may need to be -// recorded alongside a package. -// -// The tested strings are absolute paths. -var filePatterns *regexp.Regexp - -func init() { - // TODO(hank) The blanket binary pattern is too broad and can miss things. - // Long-term, we should add pattern matching akin to [yara] or file(1) as a - // plugin mechanism that all indexers can use. That way, the Go indexer - // could register a pattern and use a shared filter over the - // [fs.WalkDirFunc] while this package (and dpkg, etc) can tell that another - // indexer will find those files relevant. - // - // [yara]: https://github.com/VirusTotal/yara - pat := []string{ - `^.*/[^/]+\.jar$`, // Jar files - `^.*/site-packages/[^/]+\.egg-info/PKG-INFO$`, // Python packages - `^.*/package.json$`, // npm packages - `^.*/[^/]+\.gemspec$`, // ruby gems - `^/usr/s?bin/[^/]+$`, // any executable - "^/usr/libexec/[^/]+/[^/]+$", // sometimes the executables are here too - } - filePatterns = regexp.MustCompile(strings.Join(pat, `|`)) -} - -var wantTags = map[rpmdb.Tag]struct{}{ - rpmdb.TagArch: {}, - rpmdb.TagBasenames: {}, - rpmdb.TagDirindexes: {}, - rpmdb.TagDirnames: {}, - rpmdb.TagEpoch: {}, - rpmdb.TagFilenames: {}, - rpmdb.TagModularityLabel: {}, - rpmdb.TagName: {}, - rpmdb.TagPayloadDigest: {}, - rpmdb.TagPayloadDigestAlgo: {}, - rpmdb.TagRelease: {}, - rpmdb.TagSigPGP: {}, - rpmdb.TagSourceRPM: {}, - rpmdb.TagVersion: {}, -} - func constructEVR(b *strings.Builder, info *Info) string { b.Reset() if info.Epoch != 0 { @@ -429,56 +289,6 @@ func constructHint(_ *strings.Builder, info *Info) string { return v.Encode() } -func findDBs(ctx context.Context, out *[]foundDB, sys fs.FS) fs.WalkDirFunc { - return func(p string, d fs.DirEntry, err error) error { - if err != nil { - return err - } - if d.IsDir() { - return nil - } - - dir, n := path.Split(p) - dir = path.Clean(dir) - switch n { - case `Packages`: - f, err := sys.Open(p) - if err != nil { - return err - } - ok := bdb.CheckMagic(ctx, f) - f.Close() - if !ok { - return nil - } - *out = append(*out, foundDB{ - Path: dir, - Kind: kindBDB, - }) - case `rpmdb.sqlite`: - *out = append(*out, foundDB{ - Path: dir, - Kind: kindSQLite, - }) - case `Packages.db`: - f, err := sys.Open(p) - if err != nil { - return err - } - ok := ndb.CheckMagic(ctx, f) - f.Close() - if !ok { - return nil - } - *out = append(*out, foundDB{ - Path: dir, - Kind: kindNDB, - }) - } - return nil - } -} - func mkAt(ctx context.Context, k dbKind, f fs.File) (io.ReaderAt, func(), error) { if r, ok := f.(io.ReaderAt); ok { return r, func() {}, nil @@ -509,25 +319,3 @@ func closeSpool(ctx context.Context, f *os.File) func() { } } } - -type dbKind uint - -//go:generate -command stringer go run golang.org/x/tools/cmd/stringer -//go:generate stringer -linecomment -type dbKind - -const ( - _ dbKind = iota - - kindBDB // bdb - kindSQLite // sqlite - kindNDB // ndb -) - -type foundDB struct { - Path string - Kind dbKind -} - -func (f foundDB) String() string { - return f.Kind.String() + ":" + f.Path -} From 7c1af10aed993285c4d42638619351efc19b7d8c Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Tue, 6 May 2025 12:24:36 -0500 Subject: [PATCH 09/31] rpm: move database adapters to new path Signed-off-by: Hank Donnay --- {rpm => internal/rpm}/bdb/bdb.go | 0 {rpm => internal/rpm}/bdb/bdb_test.go | 0 {rpm => internal/rpm}/bdb/doc.go | 0 .../rpm}/bdb/testdata/bad_hoffpage_len.Packages | Bin .../rpm}/bdb/testdata/ubi8.Packages | Bin {rpm => internal/rpm}/ndb/doc.go | 0 {rpm => internal/rpm}/ndb/index.go | 0 {rpm => internal/rpm}/ndb/index_test.go | 0 {rpm => internal/rpm}/ndb/murmur.go | 0 {rpm => internal/rpm}/ndb/murmur_test.go | 0 {rpm => internal/rpm}/ndb/ndb.go | 0 {rpm => internal/rpm}/ndb/package.go | 0 {rpm => internal/rpm}/ndb/package_test.go | 0 {rpm => internal/rpm}/ndb/testdata/Index.db | Bin {rpm => internal/rpm}/ndb/testdata/Packages.db | Bin .../ndb/testdata/Packages_nonsense_block.db | Bin .../rpm}/ndb/testdata/Packages_unreadable.db | Bin .../rpm}/sqlite/sql/allpackages.sql | 0 {rpm => internal/rpm}/sqlite/sql/validate.sql | 0 {rpm => internal/rpm}/sqlite/sqlite.go | 0 {rpm => internal/rpm}/sqlite/sqlite_test.go | 0 .../rpm}/sqlite/testdata/no_packages.sqlite | Bin .../rpm}/sqlite/testdata/rpmdb.sqlite | Bin .../rpm}/sqlite/testdata/rpmdb.sqlite.checksums | 0 rpm/find.go | 4 ++-- rpm/native_db.go | 6 +++--- rpm/native_db_test.go | 16 ++++++---------- 27 files changed, 11 insertions(+), 15 deletions(-) rename {rpm => internal/rpm}/bdb/bdb.go (100%) rename {rpm => internal/rpm}/bdb/bdb_test.go (100%) rename {rpm => internal/rpm}/bdb/doc.go (100%) rename {rpm => internal/rpm}/bdb/testdata/bad_hoffpage_len.Packages (100%) rename {rpm => internal/rpm}/bdb/testdata/ubi8.Packages (100%) rename {rpm => internal/rpm}/ndb/doc.go (100%) rename {rpm => internal/rpm}/ndb/index.go (100%) rename {rpm => internal/rpm}/ndb/index_test.go (100%) rename {rpm => internal/rpm}/ndb/murmur.go (100%) rename {rpm => internal/rpm}/ndb/murmur_test.go (100%) rename {rpm => internal/rpm}/ndb/ndb.go (100%) rename {rpm => internal/rpm}/ndb/package.go (100%) rename {rpm => internal/rpm}/ndb/package_test.go (100%) rename {rpm => internal/rpm}/ndb/testdata/Index.db (100%) rename {rpm => internal/rpm}/ndb/testdata/Packages.db (100%) rename {rpm => internal/rpm}/ndb/testdata/Packages_nonsense_block.db (100%) rename {rpm => internal/rpm}/ndb/testdata/Packages_unreadable.db (100%) rename {rpm => internal/rpm}/sqlite/sql/allpackages.sql (100%) rename {rpm => internal/rpm}/sqlite/sql/validate.sql (100%) rename {rpm => internal/rpm}/sqlite/sqlite.go (100%) rename {rpm => internal/rpm}/sqlite/sqlite_test.go (100%) rename {rpm => internal/rpm}/sqlite/testdata/no_packages.sqlite (100%) rename {rpm => internal/rpm}/sqlite/testdata/rpmdb.sqlite (100%) rename {rpm => internal/rpm}/sqlite/testdata/rpmdb.sqlite.checksums (100%) diff --git a/rpm/bdb/bdb.go b/internal/rpm/bdb/bdb.go similarity index 100% rename from rpm/bdb/bdb.go rename to internal/rpm/bdb/bdb.go diff --git a/rpm/bdb/bdb_test.go b/internal/rpm/bdb/bdb_test.go similarity index 100% rename from rpm/bdb/bdb_test.go rename to internal/rpm/bdb/bdb_test.go diff --git a/rpm/bdb/doc.go b/internal/rpm/bdb/doc.go similarity index 100% rename from rpm/bdb/doc.go rename to internal/rpm/bdb/doc.go diff --git a/rpm/bdb/testdata/bad_hoffpage_len.Packages b/internal/rpm/bdb/testdata/bad_hoffpage_len.Packages similarity index 100% rename from rpm/bdb/testdata/bad_hoffpage_len.Packages rename to internal/rpm/bdb/testdata/bad_hoffpage_len.Packages diff --git a/rpm/bdb/testdata/ubi8.Packages b/internal/rpm/bdb/testdata/ubi8.Packages similarity index 100% rename from rpm/bdb/testdata/ubi8.Packages rename to internal/rpm/bdb/testdata/ubi8.Packages diff --git a/rpm/ndb/doc.go b/internal/rpm/ndb/doc.go similarity index 100% rename from rpm/ndb/doc.go rename to internal/rpm/ndb/doc.go diff --git a/rpm/ndb/index.go b/internal/rpm/ndb/index.go similarity index 100% rename from rpm/ndb/index.go rename to internal/rpm/ndb/index.go diff --git a/rpm/ndb/index_test.go b/internal/rpm/ndb/index_test.go similarity index 100% rename from rpm/ndb/index_test.go rename to internal/rpm/ndb/index_test.go diff --git a/rpm/ndb/murmur.go b/internal/rpm/ndb/murmur.go similarity index 100% rename from rpm/ndb/murmur.go rename to internal/rpm/ndb/murmur.go diff --git a/rpm/ndb/murmur_test.go b/internal/rpm/ndb/murmur_test.go similarity index 100% rename from rpm/ndb/murmur_test.go rename to internal/rpm/ndb/murmur_test.go diff --git a/rpm/ndb/ndb.go b/internal/rpm/ndb/ndb.go similarity index 100% rename from rpm/ndb/ndb.go rename to internal/rpm/ndb/ndb.go diff --git a/rpm/ndb/package.go b/internal/rpm/ndb/package.go similarity index 100% rename from rpm/ndb/package.go rename to internal/rpm/ndb/package.go diff --git a/rpm/ndb/package_test.go b/internal/rpm/ndb/package_test.go similarity index 100% rename from rpm/ndb/package_test.go rename to internal/rpm/ndb/package_test.go diff --git a/rpm/ndb/testdata/Index.db b/internal/rpm/ndb/testdata/Index.db similarity index 100% rename from rpm/ndb/testdata/Index.db rename to internal/rpm/ndb/testdata/Index.db diff --git a/rpm/ndb/testdata/Packages.db b/internal/rpm/ndb/testdata/Packages.db similarity index 100% rename from rpm/ndb/testdata/Packages.db rename to internal/rpm/ndb/testdata/Packages.db diff --git a/rpm/ndb/testdata/Packages_nonsense_block.db b/internal/rpm/ndb/testdata/Packages_nonsense_block.db similarity index 100% rename from rpm/ndb/testdata/Packages_nonsense_block.db rename to internal/rpm/ndb/testdata/Packages_nonsense_block.db diff --git a/rpm/ndb/testdata/Packages_unreadable.db b/internal/rpm/ndb/testdata/Packages_unreadable.db similarity index 100% rename from rpm/ndb/testdata/Packages_unreadable.db rename to internal/rpm/ndb/testdata/Packages_unreadable.db diff --git a/rpm/sqlite/sql/allpackages.sql b/internal/rpm/sqlite/sql/allpackages.sql similarity index 100% rename from rpm/sqlite/sql/allpackages.sql rename to internal/rpm/sqlite/sql/allpackages.sql diff --git a/rpm/sqlite/sql/validate.sql b/internal/rpm/sqlite/sql/validate.sql similarity index 100% rename from rpm/sqlite/sql/validate.sql rename to internal/rpm/sqlite/sql/validate.sql diff --git a/rpm/sqlite/sqlite.go b/internal/rpm/sqlite/sqlite.go similarity index 100% rename from rpm/sqlite/sqlite.go rename to internal/rpm/sqlite/sqlite.go diff --git a/rpm/sqlite/sqlite_test.go b/internal/rpm/sqlite/sqlite_test.go similarity index 100% rename from rpm/sqlite/sqlite_test.go rename to internal/rpm/sqlite/sqlite_test.go diff --git a/rpm/sqlite/testdata/no_packages.sqlite b/internal/rpm/sqlite/testdata/no_packages.sqlite similarity index 100% rename from rpm/sqlite/testdata/no_packages.sqlite rename to internal/rpm/sqlite/testdata/no_packages.sqlite diff --git a/rpm/sqlite/testdata/rpmdb.sqlite b/internal/rpm/sqlite/testdata/rpmdb.sqlite similarity index 100% rename from rpm/sqlite/testdata/rpmdb.sqlite rename to internal/rpm/sqlite/testdata/rpmdb.sqlite diff --git a/rpm/sqlite/testdata/rpmdb.sqlite.checksums b/internal/rpm/sqlite/testdata/rpmdb.sqlite.checksums similarity index 100% rename from rpm/sqlite/testdata/rpmdb.sqlite.checksums rename to internal/rpm/sqlite/testdata/rpmdb.sqlite.checksums diff --git a/rpm/find.go b/rpm/find.go index 5d7b91ff5..d80243d83 100644 --- a/rpm/find.go +++ b/rpm/find.go @@ -5,8 +5,8 @@ import ( "io/fs" "path" - "github.com/quay/claircore/rpm/bdb" - "github.com/quay/claircore/rpm/ndb" + "github.com/quay/claircore/internal/rpm/bdb" + "github.com/quay/claircore/internal/rpm/ndb" ) func findDBs(ctx context.Context, out *[]foundDB, sys fs.FS) fs.WalkDirFunc { diff --git a/rpm/native_db.go b/rpm/native_db.go index e4030afaf..3feb40c9a 100644 --- a/rpm/native_db.go +++ b/rpm/native_db.go @@ -17,10 +17,10 @@ import ( "golang.org/x/crypto/openpgp/packet" "github.com/quay/claircore" + "github.com/quay/claircore/internal/rpm/bdb" + "github.com/quay/claircore/internal/rpm/ndb" "github.com/quay/claircore/internal/rpm/rpmdb" - "github.com/quay/claircore/rpm/bdb" - "github.com/quay/claircore/rpm/ndb" - "github.com/quay/claircore/rpm/sqlite" + "github.com/quay/claircore/internal/rpm/sqlite" ) // NativeDB is the interface implemented for in-process RPM database handlers. diff --git a/rpm/native_db_test.go b/rpm/native_db_test.go index f47b4da45..2c44f8a3d 100644 --- a/rpm/native_db_test.go +++ b/rpm/native_db_test.go @@ -14,10 +14,10 @@ import ( "github.com/quay/zlog" "golang.org/x/tools/txtar" + "github.com/quay/claircore/internal/rpm/bdb" + "github.com/quay/claircore/internal/rpm/ndb" "github.com/quay/claircore/internal/rpm/rpmdb" - "github.com/quay/claircore/rpm/bdb" - "github.com/quay/claircore/rpm/ndb" - "github.com/quay/claircore/rpm/sqlite" + "github.com/quay/claircore/internal/rpm/sqlite" ) func TestInfo(t *testing.T) { @@ -35,7 +35,8 @@ func TestInfo(t *testing.T) { t.Run(name, func(t *testing.T) { t.Parallel() ctx := zlog.Test(context.Background(), t) - filename := strings.TrimSpace(string(ar.Comment)) + // Temporary hack as some packages are moving... + filename := filepath.Join("../internal/rpm", strings.TrimSpace(string(ar.Comment))) t.Logf("opening %q", filename) var want map[string][]string @@ -52,13 +53,8 @@ func TestInfo(t *testing.T) { t.Fatal(`"want.json" not found`) } - pre, _, ok := strings.Cut(filename, `/testdata/`) - if !ok { - t.Fatal("input file not in a testdata directory") - } - var nat nativeDB - switch pre { + switch strings.ToLower(name) { case `bdb`: f, err := os.Open(filename) if err != nil { From b33be144355b9da6e5310c5299af34bea53f8bac Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Fri, 9 May 2025 15:26:55 -0500 Subject: [PATCH 10/31] internal/rpm: internal rpm handling package Signed-off-by: Hank Donnay --- go.mod | 4 +- internal/rpm/assertions.go | 14 ++ internal/rpm/database.go | 228 ++++++++++++++++++++++++++++ internal/rpm/dbkind.go | 14 ++ internal/rpm/dbkind_string.go | 26 ++++ internal/rpm/files.go | 163 ++++++++++++++++++++ internal/rpm/files_test.go | 128 ++++++++++++++++ internal/rpm/find.go | 271 ++++++++++++++++++++++++++++++++++ internal/rpm/info.go | 255 ++++++++++++++++++++++++++++++++ internal/rpm/rpm.go | 22 +++ 10 files changed, 1123 insertions(+), 2 deletions(-) create mode 100644 internal/rpm/assertions.go create mode 100644 internal/rpm/database.go create mode 100644 internal/rpm/dbkind.go create mode 100644 internal/rpm/dbkind_string.go create mode 100644 internal/rpm/files.go create mode 100644 internal/rpm/files_test.go create mode 100644 internal/rpm/find.go create mode 100644 internal/rpm/info.go create mode 100644 internal/rpm/rpm.go diff --git a/go.mod b/go.mod index dacc59077..ef3340784 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ module github.com/quay/claircore -go 1.23.0 +go 1.24.0 -toolchain go1.24.1 +toolchain go1.24.3 require ( github.com/Masterminds/semver v1.5.0 diff --git a/internal/rpm/assertions.go b/internal/rpm/assertions.go new file mode 100644 index 000000000..0000f8052 --- /dev/null +++ b/internal/rpm/assertions.go @@ -0,0 +1,14 @@ +package rpm + +import ( + "github.com/quay/claircore/internal/rpm/bdb" + "github.com/quay/claircore/internal/rpm/ndb" + "github.com/quay/claircore/internal/rpm/sqlite" +) + +// Assert that the various database-specific packages implement [HeaderReader]. +var ( + _ HeaderReader = (*sqlite.RPMDB)(nil) + _ HeaderReader = (*bdb.PackageDB)(nil) + _ HeaderReader = (*ndb.PackageDB)(nil) +) diff --git a/internal/rpm/database.go b/internal/rpm/database.go new file mode 100644 index 000000000..c8e8bb4a0 --- /dev/null +++ b/internal/rpm/database.go @@ -0,0 +1,228 @@ +package rpm + +import ( + "context" + "fmt" + "io" + "iter" + "runtime/trace" + "strings" + "sync" + + "github.com/quay/zlog" + + "github.com/quay/claircore" + "github.com/quay/claircore/internal/rpm/rpmdb" + "github.com/quay/claircore/internal/rpmver" +) + +// Database is a handle to an RPM database. +type Database struct { + pkgdb string + cleanup io.Closer + headers HeaderReader +} + +// Packages creates an iterator over the packages in the RPM database, +// translated to [claircore.Package]s. +// +// Continuing the sequence after an error is reported skips the current package +// and processes the next one. +// +// The returned iterator is single-use. +func (db *Database) Packages(ctx context.Context) iter.Seq2[claircore.Package, error] { + ctx, task := trace.NewTask(ctx, "internal/rpm.Database.PackagesIter") + + seq := func(yield func(claircore.Package, error) bool) { + defer task.End() + + srcs := map[string]*claircore.Package{ + "(none)": nil, + "": nil, + } + headers := db.headers.Headers(ctx) + seq := loadPackageInfo(ctx, headers) + var ok bool + ct := 0 + defer func() { + zlog.Debug(ctx). + Int("packages", ct). + Msg("processed rpm db") + }() + retErr := func(err error) (cont bool) { + trace.WithRegion(ctx, "internal/rpm.Database.PackagesYield", func() { cont = yield(claircore.Package{}, err) }) + return cont + } + retPkg := func(pkg claircore.Package) (cont bool) { + trace.WithRegion(ctx, "internal/rpm.Database.PackagesYield", func() { cont = yield(pkg, nil) }) + return cont + } + + for info, err := range seq { + if err != nil { + if !retErr(err) { + return + } + continue + } + + pkg := claircore.Package{ + Kind: claircore.BINARY, + Name: info.Name, + Arch: info.Arch, + Module: info.ModuleStream(), + RepositoryHint: info.Hint(), + PackageDB: db.pkgdb, + } + v := info.NEVRA() + pkg.Version = v.EVR() + printSourceVersionWarning(ctx) + + srcRPM := info.SourceRPM + // Remove `.(no)src.rpm` + srcRPM = strings.TrimSuffix(srcRPM, ".rpm") + srcRPM = strings.TrimSuffix(srcRPM, ".src") + srcRPM = strings.TrimSuffix(srcRPM, ".nosrc") + pkg.Source, ok = srcs[srcRPM] + for !ok { + v, err := rpmver.Parse(srcRPM) + if err != nil { + zlog.Info(ctx). + Err(err). + Msg("unable to parse SOURCERPM tag, skipping") + break + } + if v.Name == nil { + zlog.Info(ctx). + Msg("no name parse out of SOURCERPM tag, skipping") + break + } + src := claircore.Package{ + Kind: claircore.SOURCE, + Name: *v.Name, + Version: v.EVR(), + // Don't want [Info.Hint] here, as it would encode the + // binary package's checksum in a (synthesized) source + // package's information. + PackageDB: db.pkgdb, + } + + pkg.Source = &src + srcs[srcRPM] = &src + ok = true + } + + ct++ + if !retPkg(pkg) { + return + } + } + } + + return seq +} + +// SourceVersionWarning is a [sync.Once] for controlling the "invalid source +// version" warning log. +// +// BUG(hank) Can't reliably populate the source: there's no NEVR information, +// just a filename that (by convention) is the NVRA. There's an in-flight [PR] +// to rpm to add this information. This package should be updated when that's +// merged. +// +// [PR]: https://github.com/rpm-software-management/rpm/pull/3755 +var sourceVersionWarning sync.Once + +func printSourceVersionWarning(ctx context.Context) { + sourceVersionWarning.Do(func() { + zlog.Warn(ctx). + Strs("see-also", []string{ + `https://github.com/rpm-software-management/rpm/issues/2796`, + `https://github.com/rpm-software-management/rpm/discussions/3703`, + `https://github.com/rpm-software-management/rpm/pull/3755`, + }). + Msg("rpm source packages always record 0 epoch; this may cause incorrect matching") + }) +} + +// PopulatePathSet adds relevant paths from the RPM database to the provided +// [PathSet]. +func (db *Database) populatePathSet(ctx context.Context, s *PathSet) error { + ctx, task := trace.NewTask(ctx, "internal/rpm.Database.populatePathSet") + defer task.End() + + seq := loadPackageInfo(ctx, db.headers.Headers(ctx)) + ct := 0 + defer func() { + zlog.Debug(ctx). + Int("packages", ct). + Int("files", s.len()). + Msg("processed rpm db") + }() + + for info, err := range seq { + if err != nil { + return err + } + ct++ + info.InsertIntoSet(s) + } + return nil +} + +func (db *Database) Close() error { + if db.cleanup != nil { + return db.cleanup.Close() + } + return nil +} + +func (db *Database) String() string { + return db.pkgdb +} + +// LoadPackageInfo maps a sequence yielding package header bytes to a sequence +// yielding package [Info] values. +// +// Any errors from the underlying sequence are passed through, and any errors +// encountered are reported. Continuing after an error is reported starts +// processing the next package header. +func loadPackageInfo(ctx context.Context, headers iter.Seq2[io.ReaderAt, error]) iter.Seq2[Info, error] { + return func(yield func(Info, error) bool) { + var h rpmdb.Header + + for r, err := range headers { + if err != nil { + if !yield(Info{}, fmt.Errorf("internal/rpm: unable to read header: %w", err)) { + return + } + continue + } + + h = rpmdb.Header{} + if err := h.Parse(ctx, r); err != nil { + if !yield(Info{}, fmt.Errorf("internal/rpm: unable to parse header: %w", err)) { + return + } + continue + } + + var i Info + if err := i.Load(ctx, &h); err != nil { + if !yield(Info{}, fmt.Errorf("internal/rpm: unable to load package information: %w", err)) { + return + } + continue + } + + // This is *not* an rpm package, it's just a public key stored in the rpm database. + if i.Name == "gpg-pubkey" { + continue + } + + if !yield(i, nil) { + return + } + } + } +} diff --git a/internal/rpm/dbkind.go b/internal/rpm/dbkind.go new file mode 100644 index 000000000..6d781b1b3 --- /dev/null +++ b/internal/rpm/dbkind.go @@ -0,0 +1,14 @@ +package rpm + +type dbKind uint + +//go:generate -command stringer go run golang.org/x/tools/cmd/stringer +//go:generate stringer -linecomment -type dbKind + +const ( + _ dbKind = iota + + kindBDB // bdb + kindSQLite // sqlite + kindNDB // ndb +) diff --git a/internal/rpm/dbkind_string.go b/internal/rpm/dbkind_string.go new file mode 100644 index 000000000..95bc7aaab --- /dev/null +++ b/internal/rpm/dbkind_string.go @@ -0,0 +1,26 @@ +// Code generated by "stringer -linecomment -type dbKind"; DO NOT EDIT. + +package rpm + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[kindBDB-1] + _ = x[kindSQLite-2] + _ = x[kindNDB-3] +} + +const _dbKind_name = "bdbsqlitendb" + +var _dbKind_index = [...]uint8{0, 3, 9, 12} + +func (i dbKind) String() string { + i -= 1 + if i >= dbKind(len(_dbKind_index)-1) { + return "dbKind(" + strconv.FormatInt(int64(i+1), 10) + ")" + } + return _dbKind_name[_dbKind_index[i]:_dbKind_index[i+1]] +} diff --git a/internal/rpm/files.go b/internal/rpm/files.go new file mode 100644 index 000000000..b5998122f --- /dev/null +++ b/internal/rpm/files.go @@ -0,0 +1,163 @@ +package rpm + +import ( + "context" + "errors" + "fmt" + "runtime" + "strings" + "sync" + "unique" + "weak" + + "github.com/quay/zlog" + "golang.org/x/sync/singleflight" + + "github.com/quay/claircore" +) + +// PkgCache is a process-wide cache for [PathSet]s. +// +// This allows for all callers to use a single [PathSet] for a given layer. +var pkgCache fileCache + +// FileCache implements a cache of [PathSet] values keyed by the layer digest. +type fileCache struct { + // map[unique.Handle[string]][weak.Pointer[PathSet]] + m sync.Map + sf singleflight.Group +} + +func (c *fileCache) cleanupFunc(wp weak.Pointer[PathSet]) func(unique.Handle[string]) { + return func(key unique.Handle[string]) { + c.m.CompareAndDelete(key, wp) + } +} + +// GetPathSet returns a [PathSet] for the provided layer, using a cached +// version if possible. +func (c *fileCache) GetPathSet(ctx context.Context, layer *claircore.Layer) (*PathSet, error) { + // This makes use of [weak.Pointer], which may be odd at first. + // + // The weak package has full documentation, but roughly: because a + // [weak.Pointer] does not keep a value alive for GC purposes, every use + // that retrieves the original pointer needs to assume that it may have + // become nil and handle that case before dereferencing it. + + key := unique.Make(layer.Hash.String()) + for { + v, ok := c.m.Load(key) + if !ok { + fn := func() (any, error) { + if v, ok := c.m.Load(key); ok { + if s := v.(weak.Pointer[PathSet]).Value(); s != nil { + return s, nil + } + c.m.CompareAndDelete(key, v) + } + + set := &PathSet{ + paths: make(map[string]struct{}), + } + sys, err := layer.FS() + if err != nil { + return nil, fmt.Errorf("internal/rpm: unable to open layer: %w", err) + } + seq, errFunc := FindDBs(ctx, sys) + defer func() { + err = errors.Join(err, errFunc()) + }() + + for found := range seq { + zlog.Debug(ctx). + Stringer("db", found). + Msg("found possible database") + err = func() error { + db, err := OpenDB(ctx, sys, found) + if err != nil { + return err + } + defer db.Close() + ctx := zlog.ContextWithValues(ctx, "db", db.String()) + zlog.Debug(ctx).Msg("examining database") + return db.populatePathSet(ctx, set) + }() + if err != nil { + return nil, err + } + + } + wp := weak.Make(set) + runtime.AddCleanup(set, c.cleanupFunc(wp), key) + c.m.Store(key, wp) + return set, nil + } + + ch := c.sf.DoChan(key.Value(), fn) + select { + case <-ctx.Done(): + return nil, context.Cause(ctx) + case res := <-ch: + if err := res.Err; err != nil { + return nil, err + } + return res.Val.(*PathSet), nil + } + } + + if s := v.(weak.Pointer[PathSet]).Value(); s != nil { + return s, nil + } + // Unable to upgrade: it's been garbage collected. + // Attempt to delete it so the next caller just has the load fail, + // then treat the key as novel. + c.m.CompareAndDelete(key, v) + } +} + +// NewPathSet returns a [PathSet] for the provided layer. +func NewPathSet(ctx context.Context, layer *claircore.Layer) (*PathSet, error) { + return pkgCache.GetPathSet(ctx, layer) +} + +// PathSet is used to check if a path is an RPM-owned file. +type PathSet struct { + // Disallow copy to prevent another reference to the "paths" map's + // backing memory. + _noCopy noCopy + paths map[string]struct{} +} + +// Contains reports true if the given path exists in the set of paths that are +// considered to be RPM files in the layer this [PathSet] was created for. +func (s *PathSet) Contains(p string) bool { + _, exists := s.paths[p] + return exists +} + +// GoString implements [fmt.GoStringer]. +func (s *PathSet) GoString() string { + var b strings.Builder + + b.WriteByte('[') + for k := range s.paths { + if b.Len() > 1 { + b.WriteByte(' ') + } + fmt.Fprintf(&b, `%q`, k) + } + b.WriteByte(']') + + return b.String() +} + +// Len reports the size of the set. +func (s *PathSet) len() int { + return len(s.paths) +} + +// NoCopy is a zero-sized type to trip the "copylocks" vet check. +type noCopy struct{} + +func (*noCopy) Lock() {} +func (*noCopy) Unlock() {} diff --git a/internal/rpm/files_test.go b/internal/rpm/files_test.go new file mode 100644 index 000000000..a0939314c --- /dev/null +++ b/internal/rpm/files_test.go @@ -0,0 +1,128 @@ +package rpm + +import ( + "context" + "runtime" + "testing" + "unique" + "weak" + + "github.com/quay/zlog" + + "github.com/quay/claircore" + "github.com/quay/claircore/test" +) + +type FileCheckerFileTestcase struct { + Name string + Owned bool + Path string +} + +type FileCheckerTestcase struct { + Name string + Layer test.LayerRef + Testcases []FileCheckerFileTestcase +} + +func (tc *FileCheckerTestcase) Run(ctx context.Context, t *testing.T, a *test.CachedArena) { + t.Run(tc.Name, func(t *testing.T) { + ctx := zlog.Test(ctx, t) + a.LoadLayerFromRegistry(ctx, t, tc.Layer) + r := a.Realizer(ctx).(*test.CachedRealizer) + t.Cleanup(func() { + if err := r.Close(); err != nil { + t.Error(err) + } + }) + + rl, err := r.RealizeDescriptions(ctx, []claircore.LayerDescription{ + { + Digest: tc.Layer.Digest, + URI: "http://example.com", + MediaType: test.MediaType, + Headers: make(map[string][]string), + }, + }) + if err != nil { + t.Fatal(err) + } + set, err := NewPathSet(ctx, &rl[0]) + if err != nil { + t.Fatal(err) + } + defer runtime.KeepAlive(set) + + for _, tc := range tc.Testcases { + t.Run(tc.Name, func(t *testing.T) { + t.Parallel() + ctx := zlog.Test(ctx, t) + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + set, err := NewPathSet(ctx, &rl[0]) + if err != nil { + t.Fatal(err) + } + t.Logf("checking path: %s", tc.Path) + if got, want := set.Contains(tc.Path), tc.Owned; got != want { + t.Errorf("got: %v, want: %v", got, want) + } + }) + } + }) +} + +func TestIsRPMFile(t *testing.T) { + ctx := zlog.Test(context.Background(), t) + a := test.NewCachedArena(t) + + t.Cleanup(func() { + t.Log("running GC") + runtime.GC() + ct := 0 + pkgCache.m.Range(func(k, v any) bool { + key := k.(unique.Handle[string]) + t.Logf("%s\tcache entry not removed", key.Value()) + f := v.(weak.Pointer[PathSet]) + if f.Value() != nil { + t.Errorf("%s\table to upgrade weak pointer", key.Value()) + } + ct++ + return true + }) + t.Logf("%d cache entries remaining", ct) + }) + + tcs := []FileCheckerTestcase{ + { + Name: "nodejs18", + Layer: test.LayerRef{ + Registry: "registry.access.redhat.com", + Name: "ubi9/nodejs-18", + Digest: `sha256:1ae06b64755052cef4c32979aded82a18f664c66fa7b50a6d2924afac2849c6e`, + }, + Testcases: []FileCheckerFileTestcase{ + { + Name: "FoundNode", + Owned: true, + Path: "usr/lib/node_modules/npm/node_modules/safe-buffer/package.json", + }, + { + Name: "FoundPython", + Owned: true, + Path: "usr/lib64/python3.9/site-packages/libcomps-0.1.18-py3.9.egg-info/PKG-INFO", + }, + { + Name: "NotFound", + Owned: false, + Path: "usr/lib/node_modules/npm/node_modules/safe-buffer/package.jsonx", + }, + }, + }, + } + + for _, tc := range tcs { + tc.Run(ctx, t, a) + } +} diff --git a/internal/rpm/find.go b/internal/rpm/find.go new file mode 100644 index 000000000..b4b6dd1dc --- /dev/null +++ b/internal/rpm/find.go @@ -0,0 +1,271 @@ +package rpm + +import ( + "context" + "errors" + "fmt" + "io" + "io/fs" + "iter" + "os" + "path" + "unique" + + "github.com/quay/zlog" + "golang.org/x/sync/errgroup" + + "github.com/quay/claircore/internal/rpm/bdb" + "github.com/quay/claircore/internal/rpm/ndb" + "github.com/quay/claircore/internal/rpm/sqlite" +) + +// FindDBs walks the passed [fs.FS] looking for any files that seem to be rpm +// databases. +// +// The returned iterator closes over the passed [fs.FS]. The returned [FoundDB] +// values are only valid to use with the same [fs.FS] value. +func FindDBs(ctx context.Context, sys fs.FS) (iter.Seq[FoundDB], func() error) { + iterationDone := errors.New("iteration done") + ctx, done := context.WithCancelCause(ctx) + // Errgroup not really necessary -- this could be done with a shared + // variable and a channel -- but the API is nice. + eg, ctx := errgroup.WithContext(ctx) + + ch := make(chan FoundDB) + eg.Go(func() error { + defer close(ch) + return fs.WalkDir(sys, ".", walk(ctx, ch, sys)) + }) + seq := func(yield func(FoundDB) bool) { + defer done(iterationDone) + for { + select { + case f, ok := <-ch: + if !ok { + return + } + if !yield(f) { + return + } + case <-ctx.Done(): + return + } + } + } + errFunc := func() error { + done(iterationDone) + err := eg.Wait() + // If the iterator exhausted normally or this function was called early, + // ignore the cancellation. + if errors.Is(err, context.Canceled) && + errors.Is(context.Cause(ctx), iterationDone) { + err = nil + } + return err + } + + return seq, errFunc +} + +func walk(ctx context.Context, out chan<- FoundDB, sys fs.FS) fs.WalkDirFunc { + handle := unique.Make(sys) + return func(p string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() { + return nil + } + + dir, n := path.Split(p) + dir = path.Clean(dir) + var kind dbKind + switch n { + case `Packages`: + f, err := sys.Open(p) + if err != nil { + return err + } + ok := bdb.CheckMagic(ctx, f) + f.Close() + if !ok { + return nil + } + kind = kindBDB + case `rpmdb.sqlite`: + kind = kindSQLite + case `Packages.db`: + f, err := sys.Open(p) + if err != nil { + return err + } + ok := ndb.CheckMagic(ctx, f) + f.Close() + if !ok { + return nil + } + kind = kindNDB + } + if kind == 0 { + return nil + } + + select { + case out <- FoundDB{ + path: dir, + kind: kind, + handle: handle, + }: + // OK + case <-ctx.Done(): + return fs.SkipAll + } + return nil + } +} + +// FoundDB is a pointer to a probable rpm database found in an [fs.FS]. +type FoundDB struct { + path string + kind dbKind + handle unique.Handle[fs.FS] +} + +// String implements [fmt.Stringer]. +func (f FoundDB) String() string { + return f.kind.String() + ":" + f.path +} + +// Filename constructs the path to the main database file. +func (f FoundDB) filename() string { + var n string + switch f.kind { + case kindBDB: + n = `Packages` + case kindSQLite: + n = `rpmdb.sqlite` + case kindNDB: + n = `Packages.db` + default: + panic("programmer error: bad kind: " + f.kind.String()) + } + return path.Join(f.path, n) +} + +// OpenDB attempts to open the database pointed to by "found." +func OpenDB(ctx context.Context, sys fs.FS, found FoundDB) (*Database, error) { + // Previous incarnations of this package ended up duplicating large chunks + // of logic around opening the databases. This pass attempts to fix that by + // using new go features. + + switch { + case found.kind == 0: + return nil, errors.New("internal/rpm: programmer error: passed zero FoundDB") + case unique.Make(sys) != found.handle: + return nil, errors.New("internal/rpm: programmer error: passed mismatched fs.FS and FoundDB") + } + + f, err := sys.Open(found.filename()) + if err != nil { + return nil, fmt.Errorf("internal/rpm: unable to open %s db: %w", found.kind.String(), err) + } + defer func() { + if err := f.Close(); err != nil { + zlog.Warn(ctx).Stringer("kind", found.kind).Err(err).Msg("unable to close db") + } + }() + + cleanup := &databaseCleanup{} + db := Database{ + pkgdb: found.path, + cleanup: cleanup, + } + + spool, err := os.CreateTemp(os.TempDir(), fmt.Sprintf(`rpm.package.%v.`, found.kind)) + if err != nil { + return nil, fmt.Errorf("internal/rpm: error spooling db: %w", err) + } + ctx = zlog.ContextWithValues(ctx, "file", spool.Name()) + cleanup.spool = spool + zlog.Debug(ctx). + Msg("copying db out of fs.FS") + + // Need to have the file linked into the filesystem for the sqlite package. + // + // See [this post] for an idea on working around it: + // + // int sqlite_fdopen( + // int fd, + // sqlite3 **connection) + // { + // char uri[48]; + // + // snprintf(uri, sizeof uri, "file:///dev/fd/%d?immutable=1", fd); + // return sqlite3_open_v2( + // uri, + // connection, + // SQLITE_OPEN_READONLY | SQLITE_OPEN_URI, + // NULL); + // } + // + // [this post]: https://sqlite.org/forum/info/57aaaf20cf703d301fed5aeaef59e70723f1d9454fb3a4e6383b2bfac6897e5a + if _, err := io.Copy(spool, f); err != nil { + if err := spool.Close(); err != nil { + zlog.Warn(ctx).Err(err).Msg("unable to close spool") + } + return nil, fmt.Errorf("internal/rpm: error spooling db: %w", err) + } + if err := spool.Sync(); err != nil { + zlog.Warn(ctx).Err(err).Msg("unable to sync spool; results may be Weird") + } + + switch found.kind { + case kindSQLite: + sdb, err := sqlite.Open(spool.Name()) + if err != nil { + return nil, fmt.Errorf("internal/rpm: unable to open sqlite db: %w", err) + } + db.headers = sdb + cleanup.close = sdb.Close + case kindBDB: + var bpdb bdb.PackageDB + if err := bpdb.Parse(spool); err != nil { + return nil, fmt.Errorf("internal/rpm: error parsing bdb db: %w", err) + } + db.headers = &bpdb + case kindNDB: + var npdb ndb.PackageDB + if err := npdb.Parse(spool); err != nil { + return nil, fmt.Errorf("internal/rpm: error parsing ndb db: %w", err) + } + db.headers = &npdb + default: + panic("unreachable") + } + zlog.Debug(ctx). + Stringer("db", found). + Msg("opened database") + + if v, ok := db.headers.(validator); ok { + if err := v.Validate(ctx); err != nil { + return nil, errors.Join(err, db.Close()) + } + } + + return &db, nil +} + +type databaseCleanup struct { + spool *os.File + close func() error +} + +func (c *databaseCleanup) Close() (err error) { + if c.spool != nil { + err = errors.Join(err, c.spool.Close(), os.Remove(c.spool.Name())) + } + if c.close != nil { + err = errors.Join(err, c.close()) + } + return err +} diff --git a/internal/rpm/info.go b/internal/rpm/info.go new file mode 100644 index 000000000..c05414df7 --- /dev/null +++ b/internal/rpm/info.go @@ -0,0 +1,255 @@ +package rpm + +import ( + "bytes" + "context" + "fmt" + "iter" + "net/url" + "path" + "regexp" + "slices" + "strconv" + "strings" + "sync" + + "golang.org/x/crypto/openpgp/packet" + + "github.com/quay/claircore/internal/rpm/rpmdb" + "github.com/quay/claircore/internal/rpmver" +) + +// Info is the package information extracted from the RPM header. +type Info struct { + Name string + Version string + Release string + SourceRPM string + Module string + Arch string + Digest string + Signature []byte // This is a PGP signature packet. + dirname []string + dirindex []int32 + basename []string + DigestAlgo int + Epoch int +} + +// Load populates the receiver with information extracted from the provided +// [rpmdb.Header]. +func (i *Info) Load(ctx context.Context, h *rpmdb.Header) error { + for idx := range h.Infos { + e := &h.Infos[idx] + if _, ok := wantTags[e.Tag]; !ok { + continue + } + v, err := h.ReadData(ctx, e) + if err != nil { + return err + } + switch e.Tag { + case rpmdb.TagName: + i.Name = v.(string) + case rpmdb.TagEpoch: + i.Epoch = int(v.([]int32)[0]) + case rpmdb.TagVersion: + i.Version = v.(string) + case rpmdb.TagRelease: + i.Release = v.(string) + case rpmdb.TagSourceRPM: + i.SourceRPM = v.(string) + case rpmdb.TagModularityLabel: + i.Module = v.(string) + case rpmdb.TagArch: + i.Arch = v.(string) + case rpmdb.TagPayloadDigestAlgo: + i.DigestAlgo = int(v.([]int32)[0]) + case rpmdb.TagPayloadDigest: + i.Digest = v.([]string)[0] + case rpmdb.TagSigPGP: + i.Signature = v.([]byte) + case rpmdb.TagDirnames: // v5-only + i.dirname = v.([]string) + case rpmdb.TagDirindexes: // v5-only + i.dirindex = v.([]int32) + case rpmdb.TagBasenames: // v5-only + i.basename = v.([]string) + case rpmdb.TagFilenames: + // Filenames is the tag used in rpm4 -- this is a best-effort for + // supporting it. This should be exclusive with the + // Dirnames/Dirindexes/Basenames tags. + // + // This takes the whole filenames value and splits it into an + // rpm5-style dir+base. + names := v.([]string) + slices.Sort(names) + i.dirname = make([]string, 0) + i.dirindex = make([]int32, 0, len(names)) + i.basename = make([]string, 0, len(names)) + cur := -1 + for _, name := range names { + dir, base := path.Split(name) + i.basename = append(i.basename, base) + if len(i.dirname) == 0 || i.dirname[cur] != dir { + cur = len(i.dirname) + i.dirname = append(i.dirname, dir) + } + i.dirindex = append(i.dirindex, int32(cur)) + } + default: + panic(fmt.Sprintf("programmer error: unhandled tag: %v", e.Tag)) + } + } + + if b, d := len(i.basename), len(i.dirindex); b != d { + return fmt.Errorf(`internal/rpm: Info: mismatched "base" and "dir" counts: %d, %d`, b, d) + } + if len(i.dirindex) != 0 { + if v, bound := slices.Max(i.dirindex), len(i.dirname); int(v) >= bound { + return fmt.Errorf(`internal/rpm: Info: invalid "dirindex": index %d is out-of-bounds (length %d)`, v, bound) + } + } + + return nil +} + +// Path reconstructs the j-th path. +// +// We only want '/'-separated paths, even if running on some other, weird OS. It +// seems that RPM assumes '/' throughout. +// +// The paths coming out of rpm are absolute, so this function makes them +// [fs.FS]-valid paths. +func (i *Info) path(j int) string { + return path.Join(i.dirname[i.dirindex[j]][1:], i.basename[j]) +} + +// Filenames returns an iterator over all paths in the [Info]. +// +// The returned paths are [fs.FS]-valid. +func (i *Info) Filenames() iter.Seq[string] { + return func(yield func(string) bool) { + for j := range i.basename { + if !yield(i.path(j)) { + return + } + } + } +} + +// InsertIntoSet inserts filtered "relevant" paths into the provided [PathSet]. +func (i *Info) InsertIntoSet(s *PathSet) { + pat := filePatterns() + for p := range i.Filenames() { + if pat.MatchString(p) { + s.paths[p] = struct{}{} + } + } +} + +// NEVRA constructs a Name-Epoch-Version-Release-Architecture [rpmver.Version]. +func (i *Info) NEVRA() rpmver.Version { + return rpmver.Version{ + Name: &i.Name, + Architecture: &i.Arch, + Epoch: strconv.Itoa(i.Epoch), + Version: i.Version, + Release: i.Release, + } +} + +// Hint constructs a string suitable to be used as the "RepositoryHint". +func (i *Info) Hint() string { + v := url.Values{} + if i.Digest != "" { + switch i.DigestAlgo { + case 8: + v.Set("hash", "sha256:"+i.Digest) + } + } + if len(i.Signature) != 0 { + prd := packet.NewReader(bytes.NewReader(i.Signature)) + p, err := prd.Next() + for ; err == nil; p, err = prd.Next() { + switch p := p.(type) { + case *packet.SignatureV3: + if p.SigType != 0 { + continue + } + v.Set("key", fmt.Sprintf("%016x", p.IssuerKeyId)) + case *packet.Signature: + if p.SigType != 0 || p.IssuerKeyId == nil { + continue + } + v.Set("key", fmt.Sprintf("%016x", *p.IssuerKeyId)) + } + } + } + return v.Encode() +} + +// ModuleStream reports the module and stream from the full module version. +// +// It returns the empty string if the [Info] does not describe a package from a +// module. +func (i *Info) ModuleStream() string { + if strings.Count(i.Module, ":") <= 1 { + return "" + } + first := true + idx := strings.IndexFunc(i.Module, func(r rune) bool { + if r != ':' { + return false + } + if first { + first = false + return false + } + return true + }) + return i.Module[:idx] +} + +// TODO(hank) This regexp-based strategy is not very robust. +// Long-term, we should add pattern matching akin to [yara] or file(1) as a +// plugin mechanism that all indexers can use. That way, the Go indexer +// could register a pattern and use a shared filter over the +// [fs.WalkDirFunc] while this package (and dpkg, etc) can tell that another +// indexer will find those files relevant. +// +// [yara]: https://github.com/VirusTotal/yara +var ( + // FilePatterns is a regular expression for *any* file that may need to be + // recorded alongside a package. + // + // The tested strings are absolute paths. + filePatterns = sync.OnceValue(func() *regexp.Regexp { + pat := []string{ + `^.*/[^/]+\.[ejw]ar$`, // Jar files + `^.*/site-packages/[^/]+\.egg-info/PKG-INFO$`, // Python packages + `^.*/package.json$`, // npm packages + `^.*/[^/]+\.gemspec$`, // ruby gems + `^/usr/s?bin/[^/]+$`, // any executable + `^/usr/libexec/[^/]+/[^/]+$`, // sometimes the executables are here too + } + return regexp.MustCompile(strings.Join(pat, `|`)) + }) +) + +var wantTags = map[rpmdb.Tag]struct{}{ + rpmdb.TagArch: {}, + rpmdb.TagBasenames: {}, + rpmdb.TagDirindexes: {}, + rpmdb.TagDirnames: {}, + rpmdb.TagEpoch: {}, + rpmdb.TagFilenames: {}, + rpmdb.TagModularityLabel: {}, + rpmdb.TagName: {}, + rpmdb.TagPayloadDigest: {}, + rpmdb.TagPayloadDigestAlgo: {}, + rpmdb.TagRelease: {}, + rpmdb.TagSigPGP: {}, + rpmdb.TagSourceRPM: {}, + rpmdb.TagVersion: {}, +} diff --git a/internal/rpm/rpm.go b/internal/rpm/rpm.go new file mode 100644 index 000000000..529b725b8 --- /dev/null +++ b/internal/rpm/rpm.go @@ -0,0 +1,22 @@ +// Package rpm allows for inspecting RPM databases in BerkleyDB, NDB, and SQLite +// formats. +package rpm + +import ( + "context" + "io" + "iter" +) + +const Version = "10" + +// HeaderReader is the interface implemented for in-process RPM database handlers. +type HeaderReader interface { + Headers(context.Context) iter.Seq2[io.ReaderAt, error] +} + +// Validator is the extra interface an RPM database can implement if it needs +// extra checks after opening. +type validator interface { + Validate(context.Context) error +} From db469a8d601ea50bd462d79b62a9edaa52b88108 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Tue, 7 Jan 2025 14:48:59 -0600 Subject: [PATCH 11/31] internal/dnf: add dnf-handling package This adds two helpers: one to discover repoids, and one to annotate a stream of Packages. Signed-off-by: Hank Donnay --- internal/dnf/dnf.go | 274 ++++++++++++++++++ internal/dnf/dnf_test.go | 91 ++++++ internal/dnf/sql.go | 22 ++ internal/dnf/sql/all_repoids.sql | 16 + internal/dnf/sql/repoid_for_package.sql | 28 ++ .../dnf/testdata/var/lib/dnf/history.sqlite | Bin 0 -> 118784 bytes 6 files changed, 431 insertions(+) create mode 100644 internal/dnf/dnf.go create mode 100644 internal/dnf/dnf_test.go create mode 100644 internal/dnf/sql.go create mode 100644 internal/dnf/sql/all_repoids.sql create mode 100644 internal/dnf/sql/repoid_for_package.sql create mode 100644 internal/dnf/testdata/var/lib/dnf/history.sqlite diff --git a/internal/dnf/dnf.go b/internal/dnf/dnf.go new file mode 100644 index 000000000..0823e74e3 --- /dev/null +++ b/internal/dnf/dnf.go @@ -0,0 +1,274 @@ +// Package dnf interfaces with dnf 4 and 5 history databases to extract repoid +// information. +// +// This package tries to use "repoid" when referring to a dnf repository's ID, +// to help distinguish it from a [claircore.Repository] ID. +package dnf // import "github.com/quay/claircore/internal/dnf" + +import ( + "context" + "database/sql" + "errors" + "fmt" + "io" + "io/fs" + "iter" + "net/url" + "os" + "runtime" + "slices" + + "github.com/quay/zlog" + _ "modernc.org/sqlite" // register the sqlite driver + + "github.com/quay/claircore" + "github.com/quay/claircore/internal/rpmver" +) + +// BUG(hank) The dnf mapping is less useful than it could be because there's no +// reliable way to turn the "repoid" that it reports into something with meaning +// outside of the Red Hat build system's builder's context. See [CLAIRDEV-45] +// for more information. +// +// [CLAIRDEV-45]: https://issues.redhat.com/browse/CLAIRDEV-45 + +// PackageSeq is an alias for the Package iterator type. +type PackageSeq = iter.Seq2[claircore.Package, error] + +// Wrap closes over the passed [fs.FS] and [PackageSeq] and returns a +// [PackageSeq] that annotates the [claircore.Package]s with the dnf repoid. +func Wrap(ctx context.Context, sys fs.FS, seq PackageSeq) (PackageSeq, error) { + h, err := openHistoryDB(ctx, sys) + if err != nil { + return nil, err + } + + wrapped := func(yield func(claircore.Package, error) bool) { + defer h.Close() + + for pkg, err := range seq { + if err != nil { + if !yield(pkg, err) { + return + } + continue + } + + err = h.AddRepoid(ctx, &pkg) + if !yield(pkg, err) { + return + } + } + } + return wrapped, nil +} + +// FindRepoids reports all the repoids discovered in the dnf history database in +// the provided [fs.FS]. +func FindRepoids(ctx context.Context, sys fs.FS) ([]string, error) { + h, err := openHistoryDB(ctx, sys) + if err != nil { + return nil, err + } + if h == nil { + return nil, nil + } + defer h.Close() + + var ret []string + rows, err := h.db.QueryContext(ctx, allRepoids, h.rm) + if err != nil { + return nil, err + } + defer func() { + if err := rows.Close(); err != nil { + zlog.Warn(ctx).Err(err).Msg("error closing returned rows") + } + }() + + for rows.Next() { + var id string + if err := rows.Scan(&id); err != nil { + return nil, fmt.Errorf("internal/dnf: error scanning repoid: %w", err) + } + ret = append(ret, id) + } + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("internal/dnf: error reading rows: %w", err) + } + + return ret, nil +} + +// DbDesc describes the path to a dnf history database and the enum used to +// denote a "removed" action. +type dbDesc struct { + Path string + Enum int +} + +// Possible is the slice of dbDesc that's examined by openHistoryDB. +var possible = []dbDesc{ + { // dnf5 + // https://github.com/rpm-software-management/dnf5/blob/5.2.13.0/libdnf5/transaction/db/db.cpp#L78-L89 + Path: `usr/lib/sysimage/libdnf5/transaction_history.sqlite`, + // https://github.com/rpm-software-management/dnf5/blob/5.2.13.0/include/libdnf5/transaction/transaction_item_action.hpp#L42 + Enum: 5, + }, + { // dnf3/4 + // https://github.com/rpm-software-management/libdnf/blob/4.90/libdnf/transaction/Swdb.hpp#L57 + Path: `var/lib/dnf/history.sqlite`, + // https://github.com/rpm-software-management/libdnf/blob/4.90/libdnf/transaction/Types.hpp#L53 + Enum: 8, + }, +} + +// HistoryDB is a handle to the dnf history database. +// +// All methods are safe to call on a nil receiver. +type historyDB struct { + db *sql.DB + rm int +} + +// OpenHistoryDB does what it says on the tin. +// +// This function may return a nil *historyDB, which is still safe to use. +func openHistoryDB(ctx context.Context, sys fs.FS) (*historyDB, error) { + var found *dbDesc +Stat: + for _, v := range possible { + switch _, err := fs.Stat(sys, v.Path); { + case errors.Is(err, nil): + found = &v + break Stat + case errors.Is(err, fs.ErrNotExist): // OK + default: + return nil, fmt.Errorf("internal/dnf: unexpected error handling fs.FS: %w", err) + } + } + if found == nil { + return nil, nil + } + var h *historyDB + + f, err := sys.Open(found.Path) + if err != nil { + return nil, fmt.Errorf("internal/dnf: unexpected error opening history: %w", err) + } + defer func() { + if err := f.Close(); err != nil { + zlog.Warn(ctx).Err(err).Msg("unable to close fs.FS db file") + } + }() + + // Needs to be linked into the filesystem for the sqlite driver to open it. + // See also: quay/claircore#720 + spool, err := os.CreateTemp(os.TempDir(), `dnf.sqlite.*`) + if err != nil { + return nil, fmt.Errorf("internal/dnf: error reading sqlite db: %w", err) + } + defer func() { + if err := spool.Close(); err != nil { + zlog.Warn(ctx).Err(err).Msg("unable to close sqlite db file") + } + // If in an error return, make sure to clean up the spool file. + if h == nil { + if err := os.Remove(spool.Name()); err != nil { + zlog.Warn(ctx).Err(err).Msg("unable to unlink sqlite db file") + } + } + }() + + zlog.Debug(ctx).Str("file", spool.Name()).Msg("copying sqlite db out of tar") + if _, err := io.Copy(spool, f); err != nil { + return nil, fmt.Errorf("internal/dnf: error spooling sqlite db: %w", err) + } + if err := spool.Sync(); err != nil { + return nil, fmt.Errorf("internal/dnf: error spooling sqlite db: %w", err) + } + + db, err := sql.Open("sqlite", spool.Name()) + if err != nil { + return nil, fmt.Errorf("internal/dnf: error reading sqlite db: %w", err) + } + if err := db.PingContext(ctx); err != nil { + return nil, fmt.Errorf("internal/dnf: error reading sqlite db: %w", err) + } + + h = &historyDB{ + db: db, + rm: found.Enum, + } + // This is an internal function, so add an extra caller frame. + _, file, line, _ := runtime.Caller(2) + runtime.SetFinalizer(h, func(_ *historyDB) { + panic(fmt.Sprintf("%s:%d: historyDB not closed", file, line)) + }) + return h, nil +} + +// AddRepoid modifies the passed [claircore.Package] with a discovered dnf +// repoid, if possible. +// +// If any error is reported, the [claircore.Package] value is not modified. +func (h *historyDB) AddRepoid(ctx context.Context, pkg *claircore.Package) error { + if h == nil { + return nil + } + + // TODO(hank) Shouldn't need to build a string like this. + v := fmt.Sprintf("%s-%s.%s", pkg.Name, pkg.Version, pkg.Arch) // "Version" contains the EVR. + ver, err := rpmver.Parse(v) + if err != nil { + zlog.Warn(ctx). + Err(err). + Str("version", v). + Msg("unable to re-parse rpm version") + return nil + } + + var id string + err = h.db. + QueryRowContext(ctx, repoidForPackage, h.rm, + *ver.Name, ver.Epoch, ver.Version, ver.Release, *ver.Architecture). + Scan(&id) + switch { + case err == nil: + case errors.Is(err, sql.ErrNoRows): + return nil + default: + return fmt.Errorf("internal/dnf: database error: %w", err) + } + + // Re-parse and edit the RepositoryHint. + // + // It's annoying to do this, a [claircore.Package] redesign should make sure + // to fix this wart where we need structured information in a string. + for _, pkg := range []*claircore.Package{pkg, pkg.Source} { + if pkg == nil { + continue + } + v, err := url.ParseQuery(pkg.RepositoryHint) + if err != nil { + return fmt.Errorf("internal/dnf: malformed RepositoryHint (%s: %#q): %w", + pkg.Name, pkg.RepositoryHint, err) + } + v.Add("repoid", id) + slices.Sort(v["repoid"]) + v["repoid"] = slices.Compact(v["repoid"]) + pkg.RepositoryHint = v.Encode() + } + + return nil +} + +// Close releases held resources. +func (h *historyDB) Close() error { + if h == nil { + return nil + } + + runtime.SetFinalizer(h, nil) + return h.db.Close() +} diff --git a/internal/dnf/dnf_test.go b/internal/dnf/dnf_test.go new file mode 100644 index 000000000..da27fcbfd --- /dev/null +++ b/internal/dnf/dnf_test.go @@ -0,0 +1,91 @@ +package dnf + +import ( + "context" + "io/fs" + "os" + "slices" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/quay/zlog" + + "github.com/quay/claircore" +) + +type testCase struct { + Name string + FS fs.FS + Package claircore.Package + Want string +} + +func (tc *testCase) Run(ctx context.Context, t *testing.T) { + t.Run(tc.Name, func(t *testing.T) { + ctx := zlog.Test(ctx, t) + seq := func(yield func(claircore.Package, error) bool) { + yield(tc.Package, nil) + } + wrapped, err := Wrap(ctx, tc.FS, seq) + if err != nil { + t.Errorf("error creating wrapper: %v", err) + } + + for p := range wrapped { + if got, want := p.RepositoryHint, tc.Want; got != want { + t.Errorf("incorrect repository hint: got: %q, want: %q", p.RepositoryHint, tc.Want) + } + } + }) +} + +func TestWrap(t *testing.T) { + ctx := zlog.Test(context.Background(), t) + sys := os.DirFS("testdata") + + tcs := []testCase{ + { + Name: "Found", + FS: sys, + Package: claircore.Package{ + Name: "apr-util-bdb", + Version: "1.6.1-23.el9", + Kind: claircore.BINARY, + Arch: "x86_64", + RepositoryHint: "something=nothing", + }, + Want: "repoid=rhel-9-for-x86_64-appstream-rpms&something=nothing", + }, + { + Name: "Absent", + FS: sys, + Package: claircore.Package{ + Name: "apr-util-bdb", + Version: "1.7.1-23.el9", // different version + Kind: claircore.BINARY, + Arch: "x86_64", + RepositoryHint: "something=nothing", + }, + Want: "something=nothing", + }, + } + for _, tc := range tcs { + tc.Run(ctx, t) + } +} + +func TestFindRepoids(t *testing.T) { + ctx := zlog.Test(context.Background(), t) + sys := os.DirFS("testdata") + + got, err := FindRepoids(ctx, sys) + if err != nil { + t.Errorf("error finding repoids: %v", err) + } + slices.Sort(got) + got = slices.Compact(got) + want := []string{"rhel-9-for-x86_64-appstream-rpms", "rhel-9-for-x86_64-baseos-rpms"} + if !cmp.Equal(got, want) { + t.Error(cmp.Diff(got, want)) + } +} diff --git a/internal/dnf/sql.go b/internal/dnf/sql.go new file mode 100644 index 000000000..ae20a67bf --- /dev/null +++ b/internal/dnf/sql.go @@ -0,0 +1,22 @@ +package dnf + +import _ "embed" // embed sql + +// Return one column containing the repoid. +// Takes six arguments, in order: +// - the "removed" enum +// - name +// - epoch +// - version +// - release +// - arch +// +//go:embed sql/repoid_for_package.sql +var repoidForPackage string + +// Return one column containing the repoids. +// Takes one argument: +// - the "removed" enum +// +//go:embed sql/all_repoids.sql +var allRepoids string diff --git a/internal/dnf/sql/all_repoids.sql b/internal/dnf/sql/all_repoids.sql new file mode 100644 index 000000000..2719c9862 --- /dev/null +++ b/internal/dnf/sql/all_repoids.sql @@ -0,0 +1,16 @@ +SELECT + repoid +FROM + trans_item + JOIN ( + SELECT + max(id) AS uniq + FROM + trans_item + WHERE + action <> ? + GROUP BY + item_id + ) ON (uniq = trans_item.id) + JOIN + repo ON (repo.id = repo_id); diff --git a/internal/dnf/sql/repoid_for_package.sql b/internal/dnf/sql/repoid_for_package.sql new file mode 100644 index 000000000..dcf54ae7a --- /dev/null +++ b/internal/dnf/sql/repoid_for_package.sql @@ -0,0 +1,28 @@ +SELECT + repoid +FROM + trans_item + JOIN ( + SELECT + max(id) AS uniq + FROM + trans_item + WHERE + action <> ? + GROUP BY + item_id + ) ON (uniq = trans_item.id) + JOIN + repo ON (repo.id = repo_id) + JOIN ( + SELECT + item_id + FROM + rpm + WHERE + name = ? AND + epoch = ? AND + version = ? AND + release = ? AND + arch = ? + ) USING (item_id); diff --git a/internal/dnf/testdata/var/lib/dnf/history.sqlite b/internal/dnf/testdata/var/lib/dnf/history.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..fca378ebdeb0c02f99b9bf8bffa1c3dcc127c4fd GIT binary patch literal 118784 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 Z01+SpM1Tko0V423BH(w8`0BR+{twGzNl5?z literal 0 HcmV?d00001 From 1e19b36e59951c43dd4db7d3191b75bd5c856e4c Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 22 Jan 2025 14:00:42 -0600 Subject: [PATCH 12/31] rhel: add package scanner Signed-off-by: Hank Donnay --- rhel/ecosystem.go | 3 +- rhel/packagescanner.go | 88 + rhel/packagescanner_test.go | 114 + rhel/testdata/bdb.rpm-manifest.json | 1571 +++++++++ .../httpd-24_9.5-1734525854.rpm-manifest.json | 2677 +++++++++++++++ rhel/testdata/nodejs.rpm-manifest.json | 3019 +++++++++++++++++ 6 files changed, 7470 insertions(+), 2 deletions(-) create mode 100644 rhel/packagescanner.go create mode 100644 rhel/packagescanner_test.go create mode 100644 rhel/testdata/bdb.rpm-manifest.json create mode 100644 rhel/testdata/httpd-24_9.5-1734525854.rpm-manifest.json create mode 100644 rhel/testdata/nodejs.rpm-manifest.json diff --git a/rhel/ecosystem.go b/rhel/ecosystem.go index ed5ac2523..be315ba3e 100644 --- a/rhel/ecosystem.go +++ b/rhel/ecosystem.go @@ -4,14 +4,13 @@ import ( "context" "github.com/quay/claircore/indexer" - "github.com/quay/claircore/rpm" ) // NewEcosystem provides the set of scanners and coalescer for the rhel ecosystem. func NewEcosystem(_ context.Context) *indexer.Ecosystem { return &indexer.Ecosystem{ PackageScanners: func(_ context.Context) ([]indexer.PackageScanner, error) { - return []indexer.PackageScanner{new(rpm.Scanner)}, nil + return []indexer.PackageScanner{PackageScanner{}}, nil }, DistributionScanners: func(_ context.Context) ([]indexer.DistributionScanner, error) { return []indexer.DistributionScanner{new(DistributionScanner)}, nil diff --git a/rhel/packagescanner.go b/rhel/packagescanner.go new file mode 100644 index 000000000..0d0d25aba --- /dev/null +++ b/rhel/packagescanner.go @@ -0,0 +1,88 @@ +package rhel + +import ( + "context" + "errors" + "fmt" + "io/fs" + "runtime/trace" + + "github.com/quay/zlog" + + "github.com/quay/claircore" + "github.com/quay/claircore/indexer" + "github.com/quay/claircore/internal/dnf" + "github.com/quay/claircore/internal/rpm" +) + +var _ indexer.PackageScanner = PackageScanner{} + +// PackageScanner implements a [indexer.PackageScanner] that consults both the +// rpm and dnf databases. +type PackageScanner struct{} + +// Kind implements [indexer.PackageScanner]. +func (p PackageScanner) Kind() string { return "package" } + +// Name implements [indexer.PackageScanner]. +func (p PackageScanner) Name() string { return "rhel-package-scanner" } + +// Version implements [indexer.PackageScanner]. +func (p PackageScanner) Version() string { return "1" } + +// Scan implements [indexer.PackageScanner]. +func (p PackageScanner) Scan(ctx context.Context, layer *claircore.Layer) ([]*claircore.Package, error) { + if err := ctx.Err(); err != nil { + return nil, err + } + defer trace.StartRegion(ctx, "PackageScanner.Scan").End() + trace.Log(ctx, "layer", layer.Hash.String()) + ctx = zlog.ContextWithValues(ctx, + "component", "rhel/PackageScanner.Scan", + "version", p.Version(), + "layer", layer.Hash.String()) + zlog.Debug(ctx).Msg("start") + defer zlog.Debug(ctx).Msg("done") + + sys, err := layer.FS() + if err != nil { + return nil, fmt.Errorf("rhel: unable to open layer: %w", err) + } + + var out []*claircore.Package + found, errFunc := rpm.FindDBs(ctx, sys) + defer func() { + err = errors.Join(err, errFunc()) + }() + for found := range found { + err = func() error { + ctx := zlog.ContextWithValues(ctx, "db", found.String()) + zlog.Debug(ctx).Msg("examining database") + db, err := rpm.OpenDB(ctx, sys, found) + switch { + case err == nil: + case errors.Is(err, fs.ErrNotExist): + return nil + default: + return err + } + defer db.Close() + pkgs, err := dnf.Wrap(ctx, sys, db.Packages(ctx)) + if err != nil { + return err + } + for pkg, err := range pkgs { + if err != nil { + return err + } + out = append(out, &pkg) + } + return nil + }() + if err != nil { + return nil, err + } + } + + return out, nil +} diff --git a/rhel/packagescanner_test.go b/rhel/packagescanner_test.go new file mode 100644 index 000000000..0d758350c --- /dev/null +++ b/rhel/packagescanner_test.go @@ -0,0 +1,114 @@ +package rhel + +import ( + "context" + "os" + "path/filepath" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/quay/zlog" + + "github.com/quay/claircore" + "github.com/quay/claircore/test" + "github.com/quay/claircore/test/rpmtest" +) + +func TestPackageScanner(t *testing.T) { + t.Parallel() + ctx := zlog.Test(context.Background(), t) + + a := test.NewCachedArena(t) + defer func() { + if err := a.Close(ctx); err != nil { + t.Error(err) + } + }() + + tt := []PackageTestcase{ + { + Name: "BDB", + ManifestFile: "bdb.rpm-manifest.json", + // Some forgotten CentOS layer. + Ref: test.LayerRef{ + Registry: "docker.io", + Name: "library/centos", + Digest: `sha256:729ec3a6ada3a6d26faca9b4779a037231f1762f759ef34c08bdd61bf52cd704`, + }, + }, + { + Name: "NodeJS", + ManifestFile: "nodejs.rpm-manifest.json", + // Layer from registry.access.redhat.com/ubi9/nodejs-18@sha256:1ff5080686736cbab820ec560873c59bd80659a2b2f8d8f4e379301a910e5d54 + Ref: test.LayerRef{ + Registry: "registry.access.redhat.com", + Name: "ubi9/nodejs-18", + Digest: `sha256:1ae06b64755052cef4c32979aded82a18f664c66fa7b50a6d2924afac2849c6e`, + }, + }, + { + Name: "Httpd24NoContentSets", + ManifestFile: "httpd-24_9.5-1734525854.rpm-manifest.json", + // Layer from registry.access.redhat.com/ubi9/httpd-24:9.5-1734525854 + Ref: test.LayerRef{ + Registry: "registry.access.redhat.com", + Name: "ubi9/httpd-24", + Digest: `sha256:572f60f98d5ae116073fa5f8c576fc014afdcd4c68875e37c37032ad2772f653`, + }, + }, + } + for _, tc := range tt { + t.Run(tc.Name, tc.Run(ctx, a)) + } +} + +type PackageTestcase struct { + Name string + ManifestFile string + Ref test.LayerRef +} + +func (tc PackageTestcase) Run(ctx context.Context, a *test.CachedArena) func(*testing.T) { + s := &PackageScanner{} + return func(t *testing.T) { + t.Parallel() + ctx := zlog.Test(ctx, t) + a.LoadLayerFromRegistry(ctx, t, tc.Ref) + wf, err := os.Open(filepath.Join("testdata/", tc.ManifestFile)) + if err != nil { + t.Fatal(err) + } + t.Cleanup(func() { + if err := wf.Close(); err != nil { + t.Error(err) + } + }) + want := rpmtest.PackagesFromRPMManifest(t, wf) + r := a.Realizer(ctx).(*test.CachedRealizer) + t.Cleanup(func() { + if err := r.Close(); err != nil { + t.Error(err) + } + }) + ls, err := r.RealizeDescriptions(ctx, []claircore.LayerDescription{ + { + Digest: tc.Ref.Digest, + URI: "http://example.com", + MediaType: test.MediaType, + Headers: make(map[string][]string), + }, + }) + if err != nil { + t.Fatal(err) + } + + got, err := s.Scan(ctx, &ls[0]) + if err != nil { + t.Error(err) + } + t.Logf("found %d packages", len(got)) + if !cmp.Equal(got, want, rpmtest.Options(t)) { + t.Error(cmp.Diff(got, want, rpmtest.Options(t))) + } + } +} diff --git a/rhel/testdata/bdb.rpm-manifest.json b/rhel/testdata/bdb.rpm-manifest.json new file mode 100644 index 000000000..649f00bd0 --- /dev/null +++ b/rhel/testdata/bdb.rpm-manifest.json @@ -0,0 +1,1571 @@ +{ + "object_type": "containerImageRPMManifest", + "rpms": [ + { + "srpm_name": "tzdata", + "name": "tzdata", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "tzdata-2019a-1.el8.src", + "release": "1.el8", + "nerva": "tzdata-2019a-1.el8.noarch" + }, + { + "srpm_name": "ncurses", + "name": "ncurses-base", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "ncurses-6.1-7.20180224.el8.src", + "release": "7.20180224.el8", + "nerva": "ncurses-base-6.1-7.20180224.el8.noarch" + }, + { + "srpm_name": "dnf", + "name": "dnf-data", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dnf-4.0.9.2-5.el8.src", + "release": "5.el8", + "nerva": "dnf-data-4.0.9.2-5.el8.noarch" + }, + { + "srpm_name": "dbus", + "name": "dbus-common", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dbus-1.12.8-7.el8.src", + "release": "7.el8", + "nerva": "dbus-common-1:1.12.8-7.el8.noarch" + }, + { + "srpm_name": "setup", + "name": "setup", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "setup-2.12.2-1.el8.src", + "release": "1.el8", + "nerva": "setup-2.12.2-1.el8.noarch" + }, + { + "srpm_name": "basesystem", + "name": "basesystem", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "basesystem-11-5.el8.src", + "release": "5.el8", + "nerva": "basesystem-11-5.el8.noarch" + }, + { + "srpm_name": "libselinux", + "name": "libselinux", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libselinux-2.8-6.el8.src", + "release": "6.el8", + "nerva": "libselinux-2.8-6.el8.x86_64" + }, + { + "srpm_name": "glibc", + "name": "glibc-minimal-langpack", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "glibc-2.28-42.el8.1.src", + "release": "42.el8.1", + "nerva": "glibc-minimal-langpack-2.28-42.el8.1.x86_64" + }, + { + "srpm_name": "glibc", + "name": "glibc", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "glibc-2.28-42.el8.1.src", + "release": "42.el8.1", + "nerva": "glibc-2.28-42.el8.1.x86_64" + }, + { + "srpm_name": "libsepol", + "name": "libsepol", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libsepol-2.8-2.el8.src", + "release": "2.el8", + "nerva": "libsepol-2.8-2.el8.x86_64" + }, + { + "srpm_name": "xz", + "name": "xz-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "xz-5.2.4-3.el8.src", + "release": "3.el8", + "nerva": "xz-libs-5.2.4-3.el8.x86_64" + }, + { + "srpm_name": "libcap", + "name": "libcap", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libcap-2.25-9.el8.src", + "release": "9.el8", + "nerva": "libcap-2.25-9.el8.x86_64" + }, + { + "srpm_name": "libgpg-error", + "name": "libgpg-error", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libgpg-error-1.31-1.el8.src", + "release": "1.el8", + "nerva": "libgpg-error-1.31-1.el8.x86_64" + }, + { + "srpm_name": "e2fsprogs", + "name": "libcom_err", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "e2fsprogs-1.44.3-2.el8.src", + "release": "2.el8", + "nerva": "libcom_err-1.44.3-2.el8.x86_64" + }, + { + "srpm_name": "libxml2", + "name": "libxml2", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libxml2-2.9.7-5.el8.src", + "release": "5.el8", + "nerva": "libxml2-2.9.7-5.el8.x86_64" + }, + { + "srpm_name": "expat", + "name": "expat", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "expat-2.2.5-3.el8.src", + "release": "3.el8", + "nerva": "expat-2.2.5-3.el8.x86_64" + }, + { + "srpm_name": "util-linux", + "name": "libuuid", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "util-linux-2.32.1-8.el8.src", + "release": "8.el8", + "nerva": "libuuid-2.32.1-8.el8.x86_64" + }, + { + "srpm_name": "chkconfig", + "name": "chkconfig", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "chkconfig-1.11-1.el8.src", + "release": "1.el8", + "nerva": "chkconfig-1.11-1.el8.x86_64" + }, + { + "srpm_name": "gmp", + "name": "gmp", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gmp-6.1.2-8.el8.src", + "release": "8.el8", + "nerva": "gmp-1:6.1.2-8.el8.x86_64" + }, + { + "srpm_name": "attr", + "name": "libattr", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "attr-2.4.48-3.el8.src", + "release": "3.el8", + "nerva": "libattr-2.4.48-3.el8.x86_64" + }, + { + "srpm_name": "coreutils", + "name": "coreutils-single", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "coreutils-8.30-6.el8.src", + "release": "6.el8", + "nerva": "coreutils-single-8.30-6.el8.x86_64" + }, + { + "srpm_name": "util-linux", + "name": "libblkid", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "util-linux-2.32.1-8.el8.src", + "release": "8.el8", + "nerva": "libblkid-2.32.1-8.el8.x86_64" + }, + { + "srpm_name": "libcap-ng", + "name": "libcap-ng", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libcap-ng-0.7.9-4.el8.src", + "release": "4.el8", + "nerva": "libcap-ng-0.7.9-4.el8.x86_64" + }, + { + "srpm_name": "libffi", + "name": "libffi", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libffi-3.1-18.el8.src", + "release": "18.el8", + "nerva": "libffi-3.1-18.el8.x86_64" + }, + { + "srpm_name": "lua", + "name": "lua-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "lua-5.3.4-10.el8.src", + "release": "10.el8", + "nerva": "lua-libs-5.3.4-10.el8.x86_64" + }, + { + "srpm_name": "p11-kit", + "name": "p11-kit", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "p11-kit-0.23.14-4.el8.src", + "release": "4.el8", + "nerva": "p11-kit-0.23.14-4.el8.x86_64" + }, + { + "srpm_name": "gzip", + "name": "gzip", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gzip-1.9-4.el8.src", + "release": "4.el8", + "nerva": "gzip-1.9-4.el8.x86_64" + }, + { + "srpm_name": "libassuan", + "name": "libassuan", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libassuan-2.5.1-3.el8.src", + "release": "3.el8", + "nerva": "libassuan-2.5.1-3.el8.x86_64" + }, + { + "srpm_name": "libidn2", + "name": "libidn2", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libidn2-2.0.5-1.el8.src", + "release": "1.el8", + "nerva": "libidn2-2.0.5-1.el8.x86_64" + }, + { + "srpm_name": "gdbm", + "name": "gdbm-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gdbm-1.18-1.el8.src", + "release": "1.el8", + "nerva": "gdbm-libs-1:1.18-1.el8.x86_64" + }, + { + "srpm_name": "libtasn1", + "name": "libtasn1", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libtasn1-4.13-3.el8.src", + "release": "3.el8", + "nerva": "libtasn1-4.13-3.el8.x86_64" + }, + { + "srpm_name": "lzo", + "name": "lzo", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "lzo-2.08-14.el8.src", + "release": "14.el8", + "nerva": "lzo-2.08-14.el8.x86_64" + }, + { + "srpm_name": "grep", + "name": "grep", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "grep-3.1-6.el8.src", + "release": "6.el8", + "nerva": "grep-3.1-6.el8.x86_64" + }, + { + "srpm_name": "glib2", + "name": "glib2", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "glib2-2.56.4-1.el8.src", + "release": "1.el8", + "nerva": "glib2-2.56.4-1.el8.x86_64" + }, + { + "srpm_name": "dbus", + "name": "dbus-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dbus-1.12.8-7.el8.src", + "release": "7.el8", + "nerva": "dbus-libs-1:1.12.8-7.el8.x86_64" + }, + { + "srpm_name": "openssl", + "name": "openssl-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "openssl-1.1.1-8.el8.src", + "release": "8.el8", + "nerva": "openssl-libs-1:1.1.1-8.el8.x86_64" + }, + { + "srpm_name": "kmod", + "name": "kmod-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "kmod-25-11.el8.src", + "release": "11.el8", + "nerva": "kmod-libs-25-11.el8.x86_64" + }, + { + "srpm_name": "kmod", + "name": "kmod", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "kmod-25-11.el8.src", + "release": "11.el8", + "nerva": "kmod-25-11.el8.x86_64" + }, + { + "srpm_name": "libarchive", + "name": "libarchive", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libarchive-3.3.2-3.el8.src", + "release": "3.el8", + "nerva": "libarchive-3.3.2-3.el8.x86_64" + }, + { + "srpm_name": "dhcp", + "name": "dhcp-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dhcp-4.3.6-30.el8.src", + "release": "30.el8", + "nerva": "dhcp-libs-12:4.3.6-30.el8.x86_64" + }, + { + "srpm_name": "procps-ng", + "name": "procps-ng", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "procps-ng-3.3.15-1.el8.src", + "release": "1.el8", + "nerva": "procps-ng-3.3.15-1.el8.x86_64" + }, + { + "srpm_name": "squashfs-tools", + "name": "squashfs-tools", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "squashfs-tools-4.3-17.el8.src", + "release": "17.el8", + "nerva": "squashfs-tools-4.3-17.el8.x86_64" + }, + { + "srpm_name": "libsemanage", + "name": "libsemanage", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libsemanage-2.8-5.el8.src", + "release": "5.el8", + "nerva": "libsemanage-2.8-5.el8.x86_64" + }, + { + "srpm_name": "dbus", + "name": "dbus-daemon", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dbus-1.12.8-7.el8.src", + "release": "7.el8", + "nerva": "dbus-daemon-1:1.12.8-7.el8.x86_64" + }, + { + "srpm_name": "util-linux", + "name": "libfdisk", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "util-linux-2.32.1-8.el8.src", + "release": "8.el8", + "nerva": "libfdisk-2.32.1-8.el8.x86_64" + }, + { + "srpm_name": "mpfr", + "name": "mpfr", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "mpfr-3.1.6-1.el8.src", + "release": "1.el8", + "nerva": "mpfr-3.1.6-1.el8.x86_64" + }, + { + "srpm_name": "gnutls", + "name": "gnutls", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gnutls-3.6.5-2.el8.src", + "release": "2.el8", + "nerva": "gnutls-3.6.5-2.el8.x86_64" + }, + { + "srpm_name": "libcomps", + "name": "libcomps", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libcomps-0.1.8-13.el8.src", + "release": "13.el8", + "nerva": "libcomps-0.1.8-13.el8.x86_64" + }, + { + "srpm_name": "libksba", + "name": "libksba", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libksba-1.3.5-7.el8.src", + "release": "7.el8", + "nerva": "libksba-1.3.5-7.el8.x86_64" + }, + { + "srpm_name": "cpio", + "name": "cpio", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "cpio-2.12-8.el8.src", + "release": "8.el8", + "nerva": "cpio-2.12-8.el8.x86_64" + }, + { + "srpm_name": "ipcalc", + "name": "ipcalc", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "ipcalc-0.2.4-3.el8.src", + "release": "3.el8", + "nerva": "ipcalc-0.2.4-3.el8.x86_64" + }, + { + "srpm_name": "iproute", + "name": "iproute", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "iproute-4.18.0-11.el8.src", + "release": "11.el8", + "nerva": "iproute-4.18.0-11.el8.x86_64" + }, + { + "srpm_name": "pkgconf", + "name": "libpkgconf", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "pkgconf-1.4.2-1.el8.src", + "release": "1.el8", + "nerva": "libpkgconf-1.4.2-1.el8.x86_64" + }, + { + "srpm_name": "pkgconf", + "name": "pkgconf-pkg-config", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "pkgconf-1.4.2-1.el8.src", + "release": "1.el8", + "nerva": "pkgconf-pkg-config-1.4.2-1.el8.x86_64" + }, + { + "srpm_name": "iptables", + "name": "iptables-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "iptables-1.8.2-9.el8.src", + "release": "9.el8", + "nerva": "iptables-libs-1.8.2-9.el8.x86_64" + }, + { + "srpm_name": "libsigsegv", + "name": "libsigsegv", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libsigsegv-2.11-5.el8.src", + "release": "5.el8", + "nerva": "libsigsegv-2.11-5.el8.x86_64" + }, + { + "srpm_name": "libverto", + "name": "libverto", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libverto-0.3.0-5.el8.src", + "release": "5.el8", + "nerva": "libverto-0.3.0-5.el8.x86_64" + }, + { + "srpm_name": "libtirpc", + "name": "libtirpc", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libtirpc-1.1.4-3.el8.src", + "release": "3.el8", + "nerva": "libtirpc-1.1.4-3.el8.x86_64" + }, + { + "srpm_name": "python-pip", + "name": "platform-python-pip", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "python-pip-9.0.3-13.el8.src", + "release": "13.el8", + "nerva": "platform-python-pip-9.0.3-13.el8.noarch" + }, + { + "srpm_name": "python3", + "name": "platform-python", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "python3-3.6.8-1.el8.0.1.src", + "release": "1.el8.0.1", + "nerva": "platform-python-3.6.8-1.el8.0.1.x86_64" + }, + { + "srpm_name": "libpwquality", + "name": "libpwquality", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libpwquality-1.4.0-9.el8.src", + "release": "9.el8", + "nerva": "libpwquality-1.4.0-9.el8.x86_64" + }, + { + "srpm_name": "util-linux", + "name": "util-linux", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "util-linux-2.32.1-8.el8.src", + "release": "8.el8", + "nerva": "util-linux-2.32.1-8.el8.x86_64" + }, + { + "srpm_name": "curl", + "name": "curl", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "curl-7.61.1-8.el8.src", + "release": "8.el8", + "nerva": "curl-7.61.1-8.el8.x86_64" + }, + { + "srpm_name": "rpm", + "name": "rpm-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "rpm-4.14.2-9.el8.src", + "release": "9.el8", + "nerva": "rpm-libs-4.14.2-9.el8.x86_64" + }, + { + "srpm_name": "lvm2", + "name": "device-mapper", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "lvm2-2.03.02-6.el8.src", + "release": "6.el8", + "nerva": "device-mapper-8:1.02.155-6.el8.x86_64" + }, + { + "srpm_name": "cryptsetup", + "name": "cryptsetup-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "cryptsetup-2.0.6-1.el8.src", + "release": "1.el8", + "nerva": "cryptsetup-libs-2.0.6-1.el8.x86_64" + }, + { + "srpm_name": "elfutils", + "name": "elfutils-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "elfutils-0.174-6.el8.src", + "release": "6.el8", + "nerva": "elfutils-libs-0.174-6.el8.x86_64" + }, + { + "srpm_name": "systemd", + "name": "systemd", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "systemd-239-13.el8.src", + "release": "13.el8", + "nerva": "systemd-239-13.el8.x86_64" + }, + { + "srpm_name": "iputils", + "name": "iputils", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "iputils-20180629-1.el8.src", + "release": "1.el8", + "nerva": "iputils-20180629-1.el8.x86_64" + }, + { + "srpm_name": "libkcapi", + "name": "libkcapi-hmaccalc", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libkcapi-1.1.1-16_1.el8.src", + "release": "16_1.el8", + "nerva": "libkcapi-hmaccalc-1.1.1-16_1.el8.x86_64" + }, + { + "srpm_name": "dracut", + "name": "dracut", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dracut-049-10.git20190115.el8.src", + "release": "10.git20190115.el8", + "nerva": "dracut-049-10.git20190115.el8.x86_64" + }, + { + "srpm_name": "libcomps", + "name": "python3-libcomps", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libcomps-0.1.8-13.el8.src", + "release": "13.el8", + "nerva": "python3-libcomps-0.1.8-13.el8.x86_64" + }, + { + "srpm_name": "python-iniparse", + "name": "python3-iniparse", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "python-iniparse-0.4-31.el8.src", + "release": "31.el8", + "nerva": "python3-iniparse-0.4-31.el8.noarch" + }, + { + "srpm_name": "dhcp", + "name": "dhcp-client", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dhcp-4.3.6-30.el8.src", + "release": "30.el8", + "nerva": "dhcp-client-12:4.3.6-30.el8.x86_64" + }, + { + "srpm_name": "cyrus-sasl", + "name": "cyrus-sasl-lib", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "cyrus-sasl-2.1.27-0.3rc7.el8.src", + "release": "0.3rc7.el8", + "nerva": "cyrus-sasl-lib-2.1.27-0.3rc7.el8.x86_64" + }, + { + "srpm_name": "libyaml", + "name": "libyaml", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libyaml-0.1.7-5.el8.src", + "release": "5.el8", + "nerva": "libyaml-0.1.7-5.el8.x86_64" + }, + { + "srpm_name": "npth", + "name": "npth", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "npth-1.5-4.el8.src", + "release": "4.el8", + "nerva": "npth-1.5-4.el8.x86_64" + }, + { + "srpm_name": "gpgme", + "name": "gpgme", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gpgme-1.10.0-6.el8.0.1.src", + "release": "6.el8.0.1", + "nerva": "gpgme-1.10.0-6.el8.0.1.x86_64" + }, + { + "srpm_name": "libdnf", + "name": "libdnf", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libdnf-0.22.5-4.el8.src", + "release": "4.el8", + "nerva": "libdnf-0.22.5-4.el8.x86_64" + }, + { + "srpm_name": "libdnf", + "name": "python3-hawkey", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libdnf-0.22.5-4.el8.src", + "release": "4.el8", + "nerva": "python3-hawkey-0.22.5-4.el8.x86_64" + }, + { + "srpm_name": "rpm", + "name": "rpm-build-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "rpm-4.14.2-9.el8.src", + "release": "9.el8", + "nerva": "rpm-build-libs-4.14.2-9.el8.x86_64" + }, + { + "srpm_name": "dnf", + "name": "python3-dnf", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dnf-4.0.9.2-5.el8.src", + "release": "5.el8", + "nerva": "python3-dnf-4.0.9.2-5.el8.noarch" + }, + { + "srpm_name": "dnf", + "name": "yum", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dnf-4.0.9.2-5.el8.src", + "release": "5.el8", + "nerva": "yum-4.0.9.2-5.el8.noarch" + }, + { + "srpm_name": "binutils", + "name": "binutils", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "binutils-2.30-49.el8.src", + "release": "49.el8", + "nerva": "binutils-2.30-49.el8.x86_64" + }, + { + "srpm_name": "vim", + "name": "vim-minimal", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "vim-8.0.1763-10.el8.src", + "release": "10.el8", + "nerva": "vim-minimal-2:8.0.1763-10.el8.x86_64" + }, + { + "srpm_name": "less", + "name": "less", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "less-530-1.el8.src", + "release": "1.el8", + "nerva": "less-530-1.el8.x86_64" + }, + { + "srpm_name": "rootfiles", + "name": "rootfiles", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "rootfiles-8.1-22.el8.src", + "release": "22.el8", + "nerva": "rootfiles-8.1-22.el8.noarch" + }, + { + "srpm_name": "gcc", + "name": "libgcc", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gcc-8.2.1-3.5.el8.src", + "release": "3.5.el8", + "nerva": "libgcc-8.2.1-3.5.el8.x86_64" + }, + { + "srpm_name": "pkgconf", + "name": "pkgconf-m4", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "pkgconf-1.4.2-1.el8.src", + "release": "1.el8", + "nerva": "pkgconf-m4-1.4.2-1.el8.noarch" + }, + { + "srpm_name": "libreport", + "name": "libreport-filesystem", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libreport-2.9.5-6.el8.src", + "release": "6.el8", + "nerva": "libreport-filesystem-2.9.5-6.el8.x86_64" + }, + { + "srpm_name": "dhcp", + "name": "dhcp-common", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dhcp-4.3.6-30.el8.src", + "release": "30.el8", + "nerva": "dhcp-common-12:4.3.6-30.el8.noarch" + }, + { + "srpm_name": "centos-release", + "name": "centos-release", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "centos-release-8.0-0.1905.0.9.el8.src", + "release": "0.1905.0.9.el8", + "nerva": "centos-release-8.0-0.1905.0.9.el8.x86_64" + }, + { + "srpm_name": "filesystem", + "name": "filesystem", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "filesystem-3.8-2.el8.src", + "release": "2.el8", + "nerva": "filesystem-3.8-2.el8.x86_64" + }, + { + "srpm_name": "pcre2", + "name": "pcre2", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "pcre2-10.32-1.el8.src", + "release": "1.el8", + "nerva": "pcre2-10.32-1.el8.x86_64" + }, + { + "srpm_name": "ncurses", + "name": "ncurses-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "ncurses-6.1-7.20180224.el8.src", + "release": "7.20180224.el8", + "nerva": "ncurses-libs-6.1-7.20180224.el8.x86_64" + }, + { + "srpm_name": "glibc", + "name": "glibc-common", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "glibc-2.28-42.el8.1.src", + "release": "42.el8.1", + "nerva": "glibc-common-2.28-42.el8.1.x86_64" + }, + { + "srpm_name": "bash", + "name": "bash", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "bash-4.4.19-7.el8.src", + "release": "7.el8", + "nerva": "bash-4.4.19-7.el8.x86_64" + }, + { + "srpm_name": "zlib", + "name": "zlib", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "zlib-1.2.11-10.el8.src", + "release": "10.el8", + "nerva": "zlib-1.2.11-10.el8.x86_64" + }, + { + "srpm_name": "bzip2", + "name": "bzip2-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "bzip2-1.0.6-26.el8.src", + "release": "26.el8", + "nerva": "bzip2-libs-1.0.6-26.el8.x86_64" + }, + { + "srpm_name": "texinfo", + "name": "info", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "texinfo-6.5-4.el8.src", + "release": "4.el8", + "nerva": "info-6.5-4.el8.x86_64" + }, + { + "srpm_name": "elfutils", + "name": "elfutils-libelf", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "elfutils-0.174-6.el8.src", + "release": "6.el8", + "nerva": "elfutils-libelf-0.174-6.el8.x86_64" + }, + { + "srpm_name": "libxcrypt", + "name": "libxcrypt", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libxcrypt-4.1.1-4.el8.src", + "release": "4.el8", + "nerva": "libxcrypt-4.1.1-4.el8.x86_64" + }, + { + "srpm_name": "sqlite", + "name": "sqlite-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "sqlite-3.26.0-3.el8.src", + "release": "3.el8", + "nerva": "sqlite-libs-3.26.0-3.el8.x86_64" + }, + { + "srpm_name": "gcc", + "name": "libstdc++", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gcc-8.2.1-3.5.el8.src", + "release": "3.5.el8", + "nerva": "libstdc++-8.2.1-3.5.el8.x86_64" + }, + { + "srpm_name": "popt", + "name": "popt", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "popt-1.16-14.el8.src", + "release": "14.el8", + "nerva": "popt-1.16-14.el8.x86_64" + }, + { + "srpm_name": "readline", + "name": "readline", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "readline-7.0-10.el8.src", + "release": "10.el8", + "nerva": "readline-7.0-10.el8.x86_64" + }, + { + "srpm_name": "json-c", + "name": "json-c", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "json-c-0.13.1-0.2.el8.src", + "release": "0.2.el8", + "nerva": "json-c-0.13.1-0.2.el8.x86_64" + }, + { + "srpm_name": "acl", + "name": "libacl", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "acl-2.2.53-1.el8.src", + "release": "1.el8", + "nerva": "libacl-2.2.53-1.el8.x86_64" + }, + { + "srpm_name": "sed", + "name": "sed", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "sed-4.5-1.el8.src", + "release": "1.el8", + "nerva": "sed-4.5-1.el8.x86_64" + }, + { + "srpm_name": "util-linux", + "name": "libmount", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "util-linux-2.32.1-8.el8.src", + "release": "8.el8", + "nerva": "libmount-2.32.1-8.el8.x86_64" + }, + { + "srpm_name": "audit", + "name": "audit-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "audit-3.0-0.10.20180831git0047a6c.el8.src", + "release": "0.10.20180831git0047a6c.el8", + "nerva": "audit-libs-3.0-0.10.20180831git0047a6c.el8.x86_64" + }, + { + "srpm_name": "util-linux", + "name": "libsmartcols", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "util-linux-2.32.1-8.el8.src", + "release": "8.el8", + "nerva": "libsmartcols-2.32.1-8.el8.x86_64" + }, + { + "srpm_name": "lz4", + "name": "lz4-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "lz4-1.8.1.2-4.el8.src", + "release": "4.el8", + "nerva": "lz4-libs-1.8.1.2-4.el8.x86_64" + }, + { + "srpm_name": "libgcrypt", + "name": "libgcrypt", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libgcrypt-1.8.3-2.el8.src", + "release": "2.el8", + "nerva": "libgcrypt-1.8.3-2.el8.x86_64" + }, + { + "srpm_name": "cracklib", + "name": "cracklib", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "cracklib-2.9.6-15.el8.src", + "release": "15.el8", + "nerva": "cracklib-2.9.6-15.el8.x86_64" + }, + { + "srpm_name": "libunistring", + "name": "libunistring", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libunistring-0.9.9-3.el8.src", + "release": "3.el8", + "nerva": "libunistring-0.9.9-3.el8.x86_64" + }, + { + "srpm_name": "file", + "name": "file-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "file-5.33-8.el8.src", + "release": "8.el8", + "nerva": "file-libs-5.33-8.el8.x86_64" + }, + { + "srpm_name": "keyutils", + "name": "keyutils-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "keyutils-1.5.10-6.el8.src", + "release": "6.el8", + "nerva": "keyutils-libs-1.5.10-6.el8.x86_64" + }, + { + "srpm_name": "p11-kit", + "name": "p11-kit-trust", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "p11-kit-0.23.14-4.el8.src", + "release": "4.el8", + "nerva": "p11-kit-trust-0.23.14-4.el8.x86_64" + }, + { + "srpm_name": "pcre", + "name": "pcre", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "pcre-8.42-4.el8.src", + "release": "4.el8", + "nerva": "pcre-8.42-4.el8.x86_64" + }, + { + "srpm_name": "systemd", + "name": "systemd-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "systemd-239-13.el8.src", + "release": "13.el8", + "nerva": "systemd-libs-239-13.el8.x86_64" + }, + { + "srpm_name": "crypto-policies", + "name": "crypto-policies", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "crypto-policies-20181217-6.git9a35207.el8.src", + "release": "6.git9a35207.el8", + "nerva": "crypto-policies-20181217-6.git9a35207.el8.noarch" + }, + { + "srpm_name": "ca-certificates", + "name": "ca-certificates", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "ca-certificates-2018.2.24-6.el8.src", + "release": "6.el8", + "nerva": "ca-certificates-2018.2.24-6.el8.noarch" + }, + { + "srpm_name": "libdb", + "name": "libdb", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libdb-5.3.28-36.el8.src", + "release": "36.el8", + "nerva": "libdb-5.3.28-36.el8.x86_64" + }, + { + "srpm_name": "ima-evm-utils", + "name": "ima-evm-utils", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "ima-evm-utils-1.1-4.el8.src", + "release": "4.el8", + "nerva": "ima-evm-utils-1.1-4.el8.x86_64" + }, + { + "srpm_name": "libdb", + "name": "libdb-utils", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libdb-5.3.28-36.el8.src", + "release": "36.el8", + "nerva": "libdb-utils-5.3.28-36.el8.x86_64" + }, + { + "srpm_name": "dbus", + "name": "dbus-tools", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dbus-1.12.8-7.el8.src", + "release": "7.el8", + "nerva": "dbus-tools-1:1.12.8-7.el8.x86_64" + }, + { + "srpm_name": "libusbx", + "name": "libusbx", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libusbx-1.0.22-1.el8.src", + "release": "1.el8", + "nerva": "libusbx-1.0.22-1.el8.x86_64" + }, + { + "srpm_name": "xz", + "name": "xz", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "xz-5.2.4-3.el8.src", + "release": "3.el8", + "nerva": "xz-5.2.4-3.el8.x86_64" + }, + { + "srpm_name": "gdbm", + "name": "gdbm", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gdbm-1.18-1.el8.src", + "release": "1.el8", + "nerva": "gdbm-1:1.18-1.el8.x86_64" + }, + { + "srpm_name": "shadow-utils", + "name": "shadow-utils", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "shadow-utils-4.6-7.el8.src", + "release": "7.el8", + "nerva": "shadow-utils-2:4.6-7.el8.x86_64" + }, + { + "srpm_name": "libutempter", + "name": "libutempter", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libutempter-1.1.6-14.el8.src", + "release": "14.el8", + "nerva": "libutempter-1.1.6-14.el8.x86_64" + }, + { + "srpm_name": "acl", + "name": "acl", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "acl-2.2.53-1.el8.src", + "release": "1.el8", + "nerva": "acl-2.2.53-1.el8.x86_64" + }, + { + "srpm_name": "nettle", + "name": "nettle", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "nettle-3.4.1-1.el8.src", + "release": "1.el8", + "nerva": "nettle-3.4.1-1.el8.x86_64" + }, + { + "srpm_name": "snappy", + "name": "snappy", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "snappy-1.1.7-5.el8.src", + "release": "5.el8", + "nerva": "snappy-1.1.7-5.el8.x86_64" + }, + { + "srpm_name": "libmetalink", + "name": "libmetalink", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libmetalink-0.1.3-7.el8.src", + "release": "7.el8", + "nerva": "libmetalink-0.1.3-7.el8.x86_64" + }, + { + "srpm_name": "findutils", + "name": "findutils", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "findutils-4.6.0-20.el8.src", + "release": "20.el8", + "nerva": "findutils-1:4.6.0-20.el8.x86_64" + }, + { + "srpm_name": "ethtool", + "name": "ethtool", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "ethtool-4.16-1.el8.src", + "release": "1.el8", + "nerva": "ethtool-2:4.16-1.el8.x86_64" + }, + { + "srpm_name": "libmnl", + "name": "libmnl", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libmnl-1.0.4-6.el8.src", + "release": "6.el8", + "nerva": "libmnl-1.0.4-6.el8.x86_64" + }, + { + "srpm_name": "nghttp2", + "name": "libnghttp2", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "nghttp2-1.33.0-1.el8.src", + "release": "1.el8", + "nerva": "libnghttp2-1.33.0-1.el8.x86_64" + }, + { + "srpm_name": "pkgconf", + "name": "pkgconf", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "pkgconf-1.4.2-1.el8.src", + "release": "1.el8", + "nerva": "pkgconf-1.4.2-1.el8.x86_64" + }, + { + "srpm_name": "libpcap", + "name": "libpcap", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libpcap-1.9.0-1.el8.src", + "release": "1.el8", + "nerva": "libpcap-14:1.9.0-1.el8.x86_64" + }, + { + "srpm_name": "libseccomp", + "name": "libseccomp", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libseccomp-2.3.3-3.el8.src", + "release": "3.el8", + "nerva": "libseccomp-2.3.3-3.el8.x86_64" + }, + { + "srpm_name": "gawk", + "name": "gawk", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gawk-4.2.1-1.el8.src", + "release": "1.el8", + "nerva": "gawk-4.2.1-1.el8.x86_64" + }, + { + "srpm_name": "krb5", + "name": "krb5-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "krb5-1.16.1-22.el8.src", + "release": "22.el8", + "nerva": "krb5-libs-1.16.1-22.el8.x86_64" + }, + { + "srpm_name": "libnsl2", + "name": "libnsl2", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libnsl2-1.2.0-2.20180605git4a062cf.el8.src", + "release": "2.20180605git4a062cf.el8", + "nerva": "libnsl2-1.2.0-2.20180605git4a062cf.el8.x86_64" + }, + { + "srpm_name": "python-setuptools", + "name": "platform-python-setuptools", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "python-setuptools-39.2.0-4.el8.src", + "release": "4.el8", + "nerva": "platform-python-setuptools-39.2.0-4.el8.noarch" + }, + { + "srpm_name": "python3", + "name": "python3-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "python3-3.6.8-1.el8.0.1.src", + "release": "1.el8.0.1", + "nerva": "python3-libs-3.6.8-1.el8.0.1.x86_64" + }, + { + "srpm_name": "pam", + "name": "pam", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "pam-1.3.1-4.el8.src", + "release": "4.el8", + "nerva": "pam-1.3.1-4.el8.x86_64" + }, + { + "srpm_name": "curl", + "name": "libcurl-minimal", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "curl-7.61.1-8.el8.src", + "release": "8.el8", + "nerva": "libcurl-minimal-7.61.1-8.el8.x86_64" + }, + { + "srpm_name": "rpm", + "name": "rpm", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "rpm-4.14.2-9.el8.src", + "release": "9.el8", + "nerva": "rpm-4.14.2-9.el8.x86_64" + }, + { + "srpm_name": "libsolv", + "name": "libsolv", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libsolv-0.6.35-6.el8.src", + "release": "6.el8", + "nerva": "libsolv-0.6.35-6.el8.x86_64" + }, + { + "srpm_name": "lvm2", + "name": "device-mapper-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "lvm2-2.03.02-6.el8.src", + "release": "6.el8", + "nerva": "device-mapper-libs-8:1.02.155-6.el8.x86_64" + }, + { + "srpm_name": "elfutils", + "name": "elfutils-default-yama-scope", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "elfutils-0.174-6.el8.src", + "release": "6.el8", + "nerva": "elfutils-default-yama-scope-0.174-6.el8.noarch" + }, + { + "srpm_name": "systemd", + "name": "systemd-pam", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "systemd-239-13.el8.src", + "release": "13.el8", + "nerva": "systemd-pam-239-13.el8.x86_64" + }, + { + "srpm_name": "dbus", + "name": "dbus", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dbus-1.12.8-7.el8.src", + "release": "7.el8", + "nerva": "dbus-1:1.12.8-7.el8.x86_64" + }, + { + "srpm_name": "libkcapi", + "name": "libkcapi", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libkcapi-1.1.1-16_1.el8.src", + "release": "16_1.el8", + "nerva": "libkcapi-1.1.1-16_1.el8.x86_64" + }, + { + "srpm_name": "systemd", + "name": "systemd-udev", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "systemd-239-13.el8.src", + "release": "13.el8", + "nerva": "systemd-udev-239-13.el8.x86_64" + }, + { + "srpm_name": "dracut", + "name": "dracut-squash", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dracut-049-10.git20190115.el8.src", + "release": "10.git20190115.el8", + "nerva": "dracut-squash-049-10.git20190115.el8.x86_64" + }, + { + "srpm_name": "python-six", + "name": "python3-six", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "python-six-1.11.0-8.el8.src", + "release": "8.el8", + "nerva": "python3-six-1.11.0-8.el8.noarch" + }, + { + "srpm_name": "bind", + "name": "bind-export-libs", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "bind-9.11.4-16.P2.el8.src", + "release": "16.P2.el8", + "nerva": "bind-export-libs-32:9.11.4-16.P2.el8.x86_64" + }, + { + "srpm_name": "dracut", + "name": "dracut-network", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dracut-049-10.git20190115.el8.src", + "release": "10.git20190115.el8", + "nerva": "dracut-network-049-10.git20190115.el8.x86_64" + }, + { + "srpm_name": "openldap", + "name": "openldap", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "openldap-2.4.46-9.el8.src", + "release": "9.el8", + "nerva": "openldap-2.4.46-9.el8.x86_64" + }, + { + "srpm_name": "libmodulemd", + "name": "libmodulemd1", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libmodulemd-2.0.0-5.el8.src", + "release": "5.el8", + "nerva": "libmodulemd1-1.8.0-5.el8.x86_64" + }, + { + "srpm_name": "gnupg2", + "name": "gnupg2", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gnupg2-2.2.9-1.el8.src", + "release": "1.el8", + "nerva": "gnupg2-2.2.9-1.el8.x86_64" + }, + { + "srpm_name": "librepo", + "name": "librepo", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "librepo-1.9.2-1.el8.src", + "release": "1.el8", + "nerva": "librepo-1.9.2-1.el8.x86_64" + }, + { + "srpm_name": "libdnf", + "name": "python3-libdnf", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "libdnf-0.22.5-4.el8.src", + "release": "4.el8", + "nerva": "python3-libdnf-0.22.5-4.el8.x86_64" + }, + { + "srpm_name": "gpgme", + "name": "python3-gpg", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "gpgme-1.10.0-6.el8.0.1.src", + "release": "6.el8.0.1", + "nerva": "python3-gpg-1.10.0-6.el8.0.1.x86_64" + }, + { + "srpm_name": "rpm", + "name": "python3-rpm", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "rpm-4.14.2-9.el8.src", + "release": "9.el8", + "nerva": "python3-rpm-4.14.2-9.el8.x86_64" + }, + { + "srpm_name": "dnf", + "name": "dnf", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "dnf-4.0.9.2-5.el8.src", + "release": "5.el8", + "nerva": "dnf-4.0.9.2-5.el8.noarch" + }, + { + "srpm_name": "kexec-tools", + "name": "kexec-tools", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "kexec-tools-2.0.17-28.el8.src", + "release": "28.el8", + "nerva": "kexec-tools-2.0.17-28.el8.x86_64" + }, + { + "srpm_name": "tar", + "name": "tar", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "tar-1.30-4.el8.src", + "release": "4.el8", + "nerva": "tar-2:1.30-4.el8.x86_64" + }, + { + "srpm_name": "hostname", + "name": "hostname", + "architecture": "x86_64", + "gpg": "05b555b38483c65d", + "srpm_nevra": "hostname-3.20-6.el8.src", + "release": "6.el8", + "nerva": "hostname-3.20-6.el8.x86_64" + }, + { + "srpm_name": "langpacks", + "name": "langpacks-en", + "architecture": "noarch", + "gpg": "05b555b38483c65d", + "srpm_nevra": "langpacks-1.0-12.el8.src", + "release": "12.el8", + "nerva": "langpacks-en-1.0-12.el8.noarch" + } + ] +} diff --git a/rhel/testdata/httpd-24_9.5-1734525854.rpm-manifest.json b/rhel/testdata/httpd-24_9.5-1734525854.rpm-manifest.json new file mode 100644 index 000000000..0554815d9 --- /dev/null +++ b/rhel/testdata/httpd-24_9.5-1734525854.rpm-manifest.json @@ -0,0 +1,2677 @@ +{ + "rpms": [ + { + "name": "acl", + "version": "2.3.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "acl", + "srpm_nevra": "acl-2.3.1-4.el9.src", + "release": "4.el9" + }, + { + "name": "alternatives", + "version": "1.24", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "chkconfig", + "srpm_nevra": "chkconfig-1.24-1.el9_5.1.src", + "release": "1.el9_5.1" + }, + { + "name": "apr", + "version": "1.7.0", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "apr", + "srpm_nevra": "apr-1.7.0-12.el9_3.src", + "release": "12.el9_3" + }, + { + "name": "apr-util", + "version": "1.6.1", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "apr-util", + "srpm_nevra": "apr-util-1.6.1-23.el9.src", + "release": "23.el9" + }, + { + "name": "apr-util-bdb", + "version": "1.6.1", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "apr-util", + "srpm_nevra": "apr-util-1.6.1-23.el9.src", + "release": "23.el9" + }, + { + "name": "apr-util-ldap", + "version": "1.6.1", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "apr-util", + "srpm_nevra": "apr-util-1.6.1-23.el9.src", + "release": "23.el9" + }, + { + "name": "apr-util-openssl", + "version": "1.6.1", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "apr-util", + "srpm_nevra": "apr-util-1.6.1-23.el9.src", + "release": "23.el9" + }, + { + "name": "attr", + "version": "2.5.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "attr", + "srpm_nevra": "attr-2.5.1-3.el9.src", + "release": "3.el9" + }, + { + "name": "audit-libs", + "version": "3.1.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "audit", + "srpm_nevra": "audit-3.1.5-1.el9.src", + "release": "1.el9" + }, + { + "name": "basesystem", + "version": "11", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "basesystem", + "srpm_nevra": "basesystem-11-13.el9.src", + "release": "13.el9" + }, + { + "name": "bash", + "version": "5.1.8", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "bash", + "srpm_nevra": "bash-5.1.8-9.el9.src", + "release": "9.el9" + }, + { + "name": "bind-libs", + "version": "32:9.16.23", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "bind", + "srpm_nevra": "bind-9.16.23-24.el9_5.src", + "release": "24.el9_5" + }, + { + "name": "bind-license", + "version": "32:9.16.23", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "bind", + "srpm_nevra": "bind-9.16.23-24.el9_5.src", + "release": "24.el9_5" + }, + { + "name": "bind-utils", + "version": "32:9.16.23", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "bind", + "srpm_nevra": "bind-9.16.23-24.el9_5.src", + "release": "24.el9_5" + }, + { + "name": "bsdtar", + "version": "3.5.3", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libarchive", + "srpm_nevra": "libarchive-3.5.3-4.el9.src", + "release": "4.el9" + }, + { + "name": "bzip2-libs", + "version": "1.0.8", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "bzip2", + "srpm_nevra": "bzip2-1.0.8-8.el9.src", + "release": "8.el9" + }, + { + "name": "ca-certificates", + "version": "2024.2.69_v8.0.303", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "ca-certificates", + "srpm_nevra": "ca-certificates-2024.2.69_v8.0.303-91.4.el9_4.src", + "release": "91.4.el9_4" + }, + { + "name": "coreutils-single", + "version": "8.32", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "coreutils", + "srpm_nevra": "coreutils-8.32-36.el9.src", + "release": "36.el9" + }, + { + "name": "cracklib", + "version": "2.9.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "cracklib", + "srpm_nevra": "cracklib-2.9.6-27.el9.src", + "release": "27.el9" + }, + { + "name": "cracklib-dicts", + "version": "2.9.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "cracklib", + "srpm_nevra": "cracklib-2.9.6-27.el9.src", + "release": "27.el9" + }, + { + "name": "crypto-policies", + "version": "20240828", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "crypto-policies", + "srpm_nevra": "crypto-policies-20240828-2.git626aa59.el9_5.src", + "release": "2.git626aa59.el9_5" + }, + { + "name": "crypto-policies-scripts", + "version": "20240828", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "crypto-policies", + "srpm_nevra": "crypto-policies-20240828-2.git626aa59.el9_5.src", + "release": "2.git626aa59.el9_5" + }, + { + "name": "curl-minimal", + "version": "7.76.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "curl", + "srpm_nevra": "curl-7.76.1-31.el9.src", + "release": "31.el9" + }, + { + "name": "cyrus-sasl-lib", + "version": "2.1.27", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "cyrus-sasl", + "srpm_nevra": "cyrus-sasl-2.1.27-21.el9.src", + "release": "21.el9" + }, + { + "name": "dbus", + "version": "1:1.12.20", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "dbus", + "srpm_nevra": "dbus-1.12.20-8.el9.src", + "release": "8.el9" + }, + { + "name": "dbus-broker", + "version": "28", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "dbus-broker", + "srpm_nevra": "dbus-broker-28-7.el9.src", + "release": "7.el9" + }, + { + "name": "dbus-common", + "version": "1:1.12.20", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "dbus", + "srpm_nevra": "dbus-1.12.20-8.el9.src", + "release": "8.el9" + }, + { + "name": "dbus-libs", + "version": "1:1.12.20", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "dbus", + "srpm_nevra": "dbus-1.12.20-8.el9.src", + "release": "8.el9" + }, + { + "name": "dejavu-sans-fonts", + "version": "2.37", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "dejavu-fonts", + "srpm_nevra": "dejavu-fonts-2.37-18.el9.src", + "release": "18.el9" + }, + { + "name": "dmidecode", + "version": "1:3.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "dmidecode", + "srpm_nevra": "dmidecode-3.6-1.el9.src", + "release": "1.el9" + }, + { + "name": "dnf", + "version": "4.14.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "dnf", + "srpm_nevra": "dnf-4.14.0-17.el9.src", + "release": "17.el9" + }, + { + "name": "dnf-data", + "version": "4.14.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "dnf", + "srpm_nevra": "dnf-4.14.0-17.el9.src", + "release": "17.el9" + }, + { + "name": "elfutils-default-yama-scope", + "version": "0.191", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "elfutils", + "srpm_nevra": "elfutils-0.191-4.el9.src", + "release": "4.el9" + }, + { + "name": "elfutils-libelf", + "version": "0.191", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "elfutils", + "srpm_nevra": "elfutils-0.191-4.el9.src", + "release": "4.el9" + }, + { + "name": "elfutils-libs", + "version": "0.191", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "elfutils", + "srpm_nevra": "elfutils-0.191-4.el9.src", + "release": "4.el9" + }, + { + "name": "environment-modules", + "version": "5.3.0", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "environment-modules", + "srpm_nevra": "environment-modules-5.3.0-1.el9.src", + "release": "1.el9" + }, + { + "name": "expat", + "version": "2.5.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "expat", + "srpm_nevra": "expat-2.5.0-3.el9_5.1.src", + "release": "3.el9_5.1" + }, + { + "name": "file-libs", + "version": "5.39", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "file", + "srpm_nevra": "file-5.39-16.el9.src", + "release": "16.el9" + }, + { + "name": "filesystem", + "version": "3.16", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "filesystem", + "srpm_nevra": "filesystem-3.16-5.el9.src", + "release": "5.el9" + }, + { + "name": "findutils", + "version": "1:4.8.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "findutils", + "srpm_nevra": "findutils-4.8.0-7.el9.src", + "release": "7.el9" + }, + { + "name": "fonts-filesystem", + "version": "1:2.0.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "fonts-rpm-macros", + "srpm_nevra": "fonts-rpm-macros-2.0.5-7.el9.1.src", + "release": "7.el9.1" + }, + { + "name": "fstrm", + "version": "0.6.1", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "fstrm", + "srpm_nevra": "fstrm-0.6.1-3.el9.src", + "release": "3.el9" + }, + { + "name": "gawk", + "version": "5.1.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gawk", + "srpm_nevra": "gawk-5.1.0-6.el9.src", + "release": "6.el9" + }, + { + "name": "gdb-gdbserver", + "version": "14.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gdb", + "srpm_nevra": "gdb-14.2-3.el9.src", + "release": "3.el9" + }, + { + "name": "gdbm-libs", + "version": "1:1.23", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gdbm", + "srpm_nevra": "gdbm-1.23-1.el9.src", + "release": "1.el9" + }, + { + "name": "gettext", + "version": "0.21", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gettext", + "srpm_nevra": "gettext-0.21-8.el9.src", + "release": "8.el9" + }, + { + "name": "gettext-libs", + "version": "0.21", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gettext", + "srpm_nevra": "gettext-0.21-8.el9.src", + "release": "8.el9" + }, + { + "name": "glib2", + "version": "2.68.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "glib2", + "srpm_nevra": "glib2-2.68.4-14.el9_4.1.src", + "release": "14.el9_4.1" + }, + { + "name": "glibc", + "version": "2.34", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "glibc", + "srpm_nevra": "glibc-2.34-125.el9_5.1.src", + "release": "125.el9_5.1" + }, + { + "name": "glibc-common", + "version": "2.34", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "glibc", + "srpm_nevra": "glibc-2.34-125.el9_5.1.src", + "release": "125.el9_5.1" + }, + { + "name": "glibc-langpack-en", + "version": "2.34", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "glibc", + "srpm_nevra": "glibc-2.34-125.el9_5.1.src", + "release": "125.el9_5.1" + }, + { + "name": "glibc-locale-source", + "version": "2.34", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "glibc", + "srpm_nevra": "glibc-2.34-125.el9_5.1.src", + "release": "125.el9_5.1" + }, + { + "name": "glibc-minimal-langpack", + "version": "2.34", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "glibc", + "srpm_nevra": "glibc-2.34-125.el9_5.1.src", + "release": "125.el9_5.1" + }, + { + "name": "gmp", + "version": "1:6.2.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gmp", + "srpm_nevra": "gmp-6.2.0-13.el9.src", + "release": "13.el9" + }, + { + "name": "gnupg2", + "version": "2.3.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gnupg2", + "srpm_nevra": "gnupg2-2.3.3-4.el9.src", + "release": "4.el9" + }, + { + "name": "gnutls", + "version": "3.8.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gnutls", + "srpm_nevra": "gnutls-3.8.3-4.el9_4.src", + "release": "4.el9_4" + }, + { + "name": "gobject-introspection", + "version": "1.68.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gobject-introspection", + "srpm_nevra": "gobject-introspection-1.68.0-11.el9.src", + "release": "11.el9" + }, + { + "name": "gpgme", + "version": "1.15.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gpgme", + "srpm_nevra": "gpgme-1.15.1-6.el9.src", + "release": "6.el9" + }, + { + "name": "grep", + "version": "3.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "grep", + "srpm_nevra": "grep-3.6-5.el9.src", + "release": "5.el9" + }, + { + "name": "groff-base", + "version": "1.22.4", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "groff", + "srpm_nevra": "groff-1.22.4-10.el9.src", + "release": "10.el9" + }, + { + "name": "gzip", + "version": "1.12", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gzip", + "srpm_nevra": "gzip-1.12-1.el9.src", + "release": "1.el9" + }, + { + "name": "hostname", + "version": "3.23", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "hostname", + "srpm_nevra": "hostname-3.23-6.el9.src", + "release": "6.el9" + }, + { + "name": "httpd", + "version": "2.4.62", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "httpd", + "srpm_nevra": "httpd-2.4.62-1.el9.src", + "release": "1.el9" + }, + { + "name": "httpd-core", + "version": "2.4.62", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "httpd", + "srpm_nevra": "httpd-2.4.62-1.el9.src", + "release": "1.el9" + }, + { + "name": "httpd-filesystem", + "version": "2.4.62", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "httpd", + "srpm_nevra": "httpd-2.4.62-1.el9.src", + "release": "1.el9" + }, + { + "name": "httpd-tools", + "version": "2.4.62", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "httpd", + "srpm_nevra": "httpd-2.4.62-1.el9.src", + "release": "1.el9" + }, + { + "name": "ima-evm-utils", + "version": "1.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "ima-evm-utils", + "srpm_nevra": "ima-evm-utils-1.5-2.el9.src", + "release": "2.el9" + }, + { + "name": "iproute", + "version": "6.2.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "iproute", + "srpm_nevra": "iproute-6.2.0-6.el9_4.src", + "release": "6.el9_4" + }, + { + "name": "json-c", + "version": "0.14", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "json-c", + "srpm_nevra": "json-c-0.14-11.el9.src", + "release": "11.el9" + }, + { + "name": "json-glib", + "version": "1.6.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "json-glib", + "srpm_nevra": "json-glib-1.6.6-1.el9.src", + "release": "1.el9" + }, + { + "name": "keyutils", + "version": "1.6.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "keyutils", + "srpm_nevra": "keyutils-1.6.3-1.el9.src", + "release": "1.el9" + }, + { + "name": "keyutils-libs", + "version": "1.6.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "keyutils", + "srpm_nevra": "keyutils-1.6.3-1.el9.src", + "release": "1.el9" + }, + { + "name": "kmod-libs", + "version": "28", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "kmod", + "srpm_nevra": "kmod-28-10.el9.src", + "release": "10.el9" + }, + { + "name": "krb5-libs", + "version": "1.21.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "krb5", + "srpm_nevra": "krb5-1.21.1-4.el9_5.src", + "release": "4.el9_5" + }, + { + "name": "langpacks-core-en", + "version": "3.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "langpacks", + "srpm_nevra": "langpacks-3.0-16.el9.src", + "release": "16.el9" + }, + { + "name": "langpacks-core-font-en", + "version": "3.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "langpacks", + "srpm_nevra": "langpacks-3.0-16.el9.src", + "release": "16.el9" + }, + { + "name": "langpacks-en", + "version": "3.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "langpacks", + "srpm_nevra": "langpacks-3.0-16.el9.src", + "release": "16.el9" + }, + { + "name": "lasso", + "version": "2.7.0", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "lasso", + "srpm_nevra": "lasso-2.7.0-11.el9.src", + "release": "11.el9" + }, + { + "name": "less", + "version": "590", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "less", + "srpm_nevra": "less-590-5.el9.src", + "release": "5.el9" + }, + { + "name": "libacl", + "version": "2.3.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "acl", + "srpm_nevra": "acl-2.3.1-4.el9.src", + "release": "4.el9" + }, + { + "name": "libarchive", + "version": "3.5.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libarchive", + "srpm_nevra": "libarchive-3.5.3-4.el9.src", + "release": "4.el9" + }, + { + "name": "libassuan", + "version": "2.5.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libassuan", + "srpm_nevra": "libassuan-2.5.5-3.el9.src", + "release": "3.el9" + }, + { + "name": "libattr", + "version": "2.5.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "attr", + "srpm_nevra": "attr-2.5.1-3.el9.src", + "release": "3.el9" + }, + { + "name": "libblkid", + "version": "2.37.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-2.37.4-20.el9.src", + "release": "20.el9" + }, + { + "name": "libbpf", + "version": "2:1.4.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libbpf", + "srpm_nevra": "libbpf-1.4.0-1.el9.src", + "release": "1.el9" + }, + { + "name": "libbrotli", + "version": "1.0.9", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "brotli", + "srpm_nevra": "brotli-1.0.9-7.el9_5.src", + "release": "7.el9_5" + }, + { + "name": "libcap", + "version": "2.48", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libcap", + "srpm_nevra": "libcap-2.48-9.el9_2.src", + "release": "9.el9_2" + }, + { + "name": "libcap-ng", + "version": "0.8.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libcap-ng", + "srpm_nevra": "libcap-ng-0.8.2-7.el9.src", + "release": "7.el9" + }, + { + "name": "libcom_err", + "version": "1.46.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "e2fsprogs", + "srpm_nevra": "e2fsprogs-1.46.5-5.el9.src", + "release": "5.el9" + }, + { + "name": "libcomps", + "version": "0.1.18", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libcomps", + "srpm_nevra": "libcomps-0.1.18-1.el9.src", + "release": "1.el9" + }, + { + "name": "libcurl-minimal", + "version": "7.76.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "curl", + "srpm_nevra": "curl-7.76.1-31.el9.src", + "release": "31.el9" + }, + { + "name": "libdb", + "version": "5.3.28", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libdb", + "srpm_nevra": "libdb-5.3.28-54.el9.src", + "release": "54.el9" + }, + { + "name": "libdnf", + "version": "0.69.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libdnf", + "srpm_nevra": "libdnf-0.69.0-12.el9.src", + "release": "12.el9" + }, + { + "name": "libdnf-plugin-subscription-manager", + "version": "1.29.42", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "subscription-manager", + "srpm_nevra": "subscription-manager-1.29.42-1.el9.src", + "release": "1.el9" + }, + { + "name": "libeconf", + "version": "0.4.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libeconf", + "srpm_nevra": "libeconf-0.4.1-4.el9.src", + "release": "4.el9" + }, + { + "name": "libevent", + "version": "2.1.12", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libevent", + "srpm_nevra": "libevent-2.1.12-8.el9_4.src", + "release": "8.el9_4" + }, + { + "name": "libfdisk", + "version": "2.37.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-2.37.4-20.el9.src", + "release": "20.el9" + }, + { + "name": "libffi", + "version": "3.4.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libffi", + "srpm_nevra": "libffi-3.4.2-8.el9.src", + "release": "8.el9" + }, + { + "name": "libgcc", + "version": "11.5.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gcc", + "srpm_nevra": "gcc-11.5.0-2.el9.src", + "release": "2.el9" + }, + { + "name": "libgcrypt", + "version": "1.10.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libgcrypt", + "srpm_nevra": "libgcrypt-1.10.0-11.el9.src", + "release": "11.el9" + }, + { + "name": "libgomp", + "version": "11.5.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gcc", + "srpm_nevra": "gcc-11.5.0-2.el9.src", + "release": "2.el9" + }, + { + "name": "libgpg-error", + "version": "1.42", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libgpg-error", + "srpm_nevra": "libgpg-error-1.42-5.el9.src", + "release": "5.el9" + }, + { + "name": "libidn2", + "version": "2.3.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libidn2", + "srpm_nevra": "libidn2-2.3.0-7.el9.src", + "release": "7.el9" + }, + { + "name": "libksba", + "version": "1.5.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libksba", + "srpm_nevra": "libksba-1.5.1-7.el9.src", + "release": "7.el9" + }, + { + "name": "libmaxminddb", + "version": "1.5.2", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libmaxminddb", + "srpm_nevra": "libmaxminddb-1.5.2-4.el9.src", + "release": "4.el9" + }, + { + "name": "libmnl", + "version": "1.0.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libmnl", + "srpm_nevra": "libmnl-1.0.4-16.el9_4.src", + "release": "16.el9_4" + }, + { + "name": "libmodulemd", + "version": "2.13.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libmodulemd", + "srpm_nevra": "libmodulemd-2.13.0-2.el9.src", + "release": "2.el9" + }, + { + "name": "libmount", + "version": "2.37.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-2.37.4-20.el9.src", + "release": "20.el9" + }, + { + "name": "libnghttp2", + "version": "1.43.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "nghttp2", + "srpm_nevra": "nghttp2-1.43.0-6.el9.src", + "release": "6.el9" + }, + { + "name": "libpath_utils", + "version": "0.2.1", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "ding-libs", + "srpm_nevra": "ding-libs-0.6.1-53.el9.src", + "release": "53.el9" + }, + { + "name": "libpipeline", + "version": "1.5.3", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libpipeline", + "srpm_nevra": "libpipeline-1.5.3-4.el9.src", + "release": "4.el9" + }, + { + "name": "libpwquality", + "version": "1.4.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libpwquality", + "srpm_nevra": "libpwquality-1.4.4-8.el9.src", + "release": "8.el9" + }, + { + "name": "librepo", + "version": "1.14.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "librepo", + "srpm_nevra": "librepo-1.14.5-2.el9.src", + "release": "2.el9" + }, + { + "name": "libreport-filesystem", + "version": "2.15.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "libreport", + "srpm_nevra": "libreport-2.15.2-6.el9.src", + "release": "6.el9" + }, + { + "name": "librhsm", + "version": "0.0.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "librhsm", + "srpm_nevra": "librhsm-0.0.3-9.el9.src", + "release": "9.el9" + }, + { + "name": "libseccomp", + "version": "2.5.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libseccomp", + "srpm_nevra": "libseccomp-2.5.2-2.el9.src", + "release": "2.el9" + }, + { + "name": "libselinux", + "version": "3.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libselinux", + "srpm_nevra": "libselinux-3.6-1.el9.src", + "release": "1.el9" + }, + { + "name": "libsemanage", + "version": "3.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libsemanage", + "srpm_nevra": "libsemanage-3.6-2.1.el9_5.src", + "release": "2.1.el9_5" + }, + { + "name": "libsepol", + "version": "3.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libsepol", + "srpm_nevra": "libsepol-3.6-1.el9.src", + "release": "1.el9" + }, + { + "name": "libsigsegv", + "version": "2.13", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libsigsegv", + "srpm_nevra": "libsigsegv-2.13-4.el9.src", + "release": "4.el9" + }, + { + "name": "libsmartcols", + "version": "2.37.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-2.37.4-20.el9.src", + "release": "20.el9" + }, + { + "name": "libsolv", + "version": "0.7.24", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libsolv", + "srpm_nevra": "libsolv-0.7.24-3.el9.src", + "release": "3.el9" + }, + { + "name": "libstdc++", + "version": "11.5.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gcc", + "srpm_nevra": "gcc-11.5.0-2.el9.src", + "release": "2.el9" + }, + { + "name": "libtalloc", + "version": "2.4.2", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libtalloc", + "srpm_nevra": "libtalloc-2.4.2-1.el9.src", + "release": "1.el9" + }, + { + "name": "libtasn1", + "version": "4.16.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libtasn1", + "srpm_nevra": "libtasn1-4.16.0-8.el9_1.src", + "release": "8.el9_1" + }, + { + "name": "libtool-ltdl", + "version": "2.4.6", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libtool", + "srpm_nevra": "libtool-2.4.6-46.el9.src", + "release": "46.el9" + }, + { + "name": "libunistring", + "version": "0.9.10", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libunistring", + "srpm_nevra": "libunistring-0.9.10-15.el9.src", + "release": "15.el9" + }, + { + "name": "libuser", + "version": "0.63", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libuser", + "srpm_nevra": "libuser-0.63-15.el9.src", + "release": "15.el9" + }, + { + "name": "libutempter", + "version": "1.2.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libutempter", + "srpm_nevra": "libutempter-1.2.1-6.el9.src", + "release": "6.el9" + }, + { + "name": "libuuid", + "version": "2.37.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-2.37.4-20.el9.src", + "release": "20.el9" + }, + { + "name": "libuv", + "version": "1:1.42.0", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libuv", + "srpm_nevra": "libuv-1.42.0-2.el9_4.src", + "release": "2.el9_4" + }, + { + "name": "libverto", + "version": "0.3.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libverto", + "srpm_nevra": "libverto-0.3.2-3.el9.src", + "release": "3.el9" + }, + { + "name": "libxcrypt", + "version": "4.4.18", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libxcrypt", + "srpm_nevra": "libxcrypt-4.4.18-3.el9.src", + "release": "3.el9" + }, + { + "name": "libxml2", + "version": "2.9.13", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libxml2", + "srpm_nevra": "libxml2-2.9.13-6.el9_4.src", + "release": "6.el9_4" + }, + { + "name": "libxslt", + "version": "1.1.34", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libxslt", + "srpm_nevra": "libxslt-1.1.34-9.el9.src", + "release": "9.el9" + }, + { + "name": "libyaml", + "version": "0.2.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libyaml", + "srpm_nevra": "libyaml-0.2.5-7.el9.src", + "release": "7.el9" + }, + { + "name": "libzstd", + "version": "1.5.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "zstd", + "srpm_nevra": "zstd-1.5.1-2.el9.src", + "release": "2.el9" + }, + { + "name": "lmdb-libs", + "version": "0.9.29", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "lmdb", + "srpm_nevra": "lmdb-0.9.29-3.el9.src", + "release": "3.el9" + }, + { + "name": "lua-libs", + "version": "5.4.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "lua", + "srpm_nevra": "lua-5.4.4-4.el9.src", + "release": "4.el9" + }, + { + "name": "lz4-libs", + "version": "1.9.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "lz4", + "srpm_nevra": "lz4-1.9.3-5.el9.src", + "release": "5.el9" + }, + { + "name": "mailcap", + "version": "2.1.49", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "mailcap", + "srpm_nevra": "mailcap-2.1.49-5.el9.src", + "release": "5.el9" + }, + { + "name": "man-db", + "version": "2.9.3", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "man-db", + "srpm_nevra": "man-db-2.9.3-7.el9.src", + "release": "7.el9" + }, + { + "name": "mod_auth_mellon", + "version": "0.17.0", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "mod_auth_mellon", + "srpm_nevra": "mod_auth_mellon-0.17.0-7.el9.src", + "release": "7.el9" + }, + { + "name": "mod_http2", + "version": "2.0.26", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "mod_http2", + "srpm_nevra": "mod_http2-2.0.26-2.el9_4.1.src", + "release": "2.el9_4.1" + }, + { + "name": "mod_ldap", + "version": "2.4.62", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "httpd", + "srpm_nevra": "httpd-2.4.62-1.el9.src", + "release": "1.el9" + }, + { + "name": "mod_lua", + "version": "2.4.62", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "httpd", + "srpm_nevra": "httpd-2.4.62-1.el9.src", + "release": "1.el9" + }, + { + "name": "mod_security", + "version": "2.9.6", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "mod_security", + "srpm_nevra": "mod_security-2.9.6-1.el9.src", + "release": "1.el9" + }, + { + "name": "mod_session", + "version": "2.4.62", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "httpd", + "srpm_nevra": "httpd-2.4.62-1.el9.src", + "release": "1.el9" + }, + { + "name": "mod_ssl", + "version": "1:2.4.62", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "httpd", + "srpm_nevra": "httpd-2.4.62-1.el9.src", + "release": "1.el9" + }, + { + "name": "mpfr", + "version": "4.1.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "mpfr", + "srpm_nevra": "mpfr-4.1.0-7.el9.src", + "release": "7.el9" + }, + { + "name": "ncurses-base", + "version": "6.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "ncurses", + "srpm_nevra": "ncurses-6.2-10.20210508.el9.src", + "release": "10.20210508.el9" + }, + { + "name": "ncurses-libs", + "version": "6.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "ncurses", + "srpm_nevra": "ncurses-6.2-10.20210508.el9.src", + "release": "10.20210508.el9" + }, + { + "name": "nettle", + "version": "3.9.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "nettle", + "srpm_nevra": "nettle-3.9.1-1.el9.src", + "release": "1.el9" + }, + { + "name": "npth", + "version": "1.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "npth", + "srpm_nevra": "npth-1.6-8.el9.src", + "release": "8.el9" + }, + { + "name": "nss_wrapper-libs", + "version": "1.1.13", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "nss_wrapper", + "srpm_nevra": "nss_wrapper-1.1.13-1.el9.src", + "release": "1.el9" + }, + { + "name": "openldap", + "version": "2.6.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "openldap", + "srpm_nevra": "openldap-2.6.6-3.el9.src", + "release": "3.el9" + }, + { + "name": "openssl", + "version": "1:3.2.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "openssl", + "srpm_nevra": "openssl-3.2.2-6.el9_5.src", + "release": "6.el9_5" + }, + { + "name": "openssl-fips-provider", + "version": "3.0.7", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "openssl-fips-provider", + "srpm_nevra": "openssl-fips-provider-3.0.7-6.el9_5.src", + "release": "6.el9_5" + }, + { + "name": "openssl-fips-provider-so", + "version": "3.0.7", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "openssl-fips-provider", + "srpm_nevra": "openssl-fips-provider-3.0.7-6.el9_5.src", + "release": "6.el9_5" + }, + { + "name": "openssl-libs", + "version": "1:3.2.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "openssl", + "srpm_nevra": "openssl-3.2.2-6.el9_5.src", + "release": "6.el9_5" + }, + { + "name": "p11-kit", + "version": "0.25.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "p11-kit", + "srpm_nevra": "p11-kit-0.25.3-3.el9_5.src", + "release": "3.el9_5" + }, + { + "name": "p11-kit-trust", + "version": "0.25.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "p11-kit", + "srpm_nevra": "p11-kit-0.25.3-3.el9_5.src", + "release": "3.el9_5" + }, + { + "name": "pam", + "version": "1.5.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "pam", + "srpm_nevra": "pam-1.5.1-22.el9_5.src", + "release": "22.el9_5" + }, + { + "name": "passwd", + "version": "0.80", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "passwd", + "srpm_nevra": "passwd-0.80-12.el9.src", + "release": "12.el9" + }, + { + "name": "pcre", + "version": "8.44", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "pcre", + "srpm_nevra": "pcre-8.44-4.el9.src", + "release": "4.el9" + }, + { + "name": "pcre2", + "version": "10.40", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "pcre2", + "srpm_nevra": "pcre2-10.40-6.el9.src", + "release": "6.el9" + }, + { + "name": "pcre2-syntax", + "version": "10.40", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "pcre2", + "srpm_nevra": "pcre2-10.40-6.el9.src", + "release": "6.el9" + }, + { + "name": "popt", + "version": "1.18", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "popt", + "srpm_nevra": "popt-1.18-8.el9.src", + "release": "8.el9" + }, + { + "name": "procps-ng", + "version": "3.3.17", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "procps-ng", + "srpm_nevra": "procps-ng-3.3.17-14.el9.src", + "release": "14.el9" + }, + { + "name": "protobuf-c", + "version": "1.3.3", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "protobuf-c", + "srpm_nevra": "protobuf-c-1.3.3-13.el9.src", + "release": "13.el9" + }, + { + "name": "psmisc", + "version": "23.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "psmisc", + "srpm_nevra": "psmisc-23.4-3.el9.src", + "release": "3.el9" + }, + { + "name": "python3", + "version": "3.9.21", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "python3.9", + "srpm_nevra": "python3.9-3.9.21-1.el9_5.src", + "release": "1.el9_5" + }, + { + "name": "python3-chardet", + "version": "4.0.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-chardet", + "srpm_nevra": "python-chardet-4.0.0-5.el9.src", + "release": "5.el9" + }, + { + "name": "python3-cloud-what", + "version": "1.29.42", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "subscription-manager", + "srpm_nevra": "subscription-manager-1.29.42-1.el9.src", + "release": "1.el9" + }, + { + "name": "python3-dateutil", + "version": "1:2.8.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-dateutil", + "srpm_nevra": "python-dateutil-2.8.1-7.el9.src", + "release": "7.el9" + }, + { + "name": "python3-dbus", + "version": "1.2.18", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "dbus-python", + "srpm_nevra": "dbus-python-1.2.18-2.el9.src", + "release": "2.el9" + }, + { + "name": "python3-decorator", + "version": "4.4.2", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-decorator", + "srpm_nevra": "python-decorator-4.4.2-6.el9.src", + "release": "6.el9" + }, + { + "name": "python3-dnf", + "version": "4.14.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "dnf", + "srpm_nevra": "dnf-4.14.0-17.el9.src", + "release": "17.el9" + }, + { + "name": "python3-dnf-plugins-core", + "version": "4.3.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "dnf-plugins-core", + "srpm_nevra": "dnf-plugins-core-4.3.0-16.el9.src", + "release": "16.el9" + }, + { + "name": "python3-gobject-base", + "version": "3.40.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "pygobject3", + "srpm_nevra": "pygobject3-3.40.1-6.el9.src", + "release": "6.el9" + }, + { + "name": "python3-gobject-base-noarch", + "version": "3.40.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "pygobject3", + "srpm_nevra": "pygobject3-3.40.1-6.el9.src", + "release": "6.el9" + }, + { + "name": "python3-gpg", + "version": "1.15.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "gpgme", + "srpm_nevra": "gpgme-1.15.1-6.el9.src", + "release": "6.el9" + }, + { + "name": "python3-hawkey", + "version": "0.69.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libdnf", + "srpm_nevra": "libdnf-0.69.0-12.el9.src", + "release": "12.el9" + }, + { + "name": "python3-idna", + "version": "2.10", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-idna", + "srpm_nevra": "python-idna-2.10-7.el9_4.1.src", + "release": "7.el9_4.1" + }, + { + "name": "python3-iniparse", + "version": "0.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-iniparse", + "srpm_nevra": "python-iniparse-0.4-45.el9.src", + "release": "45.el9" + }, + { + "name": "python3-inotify", + "version": "0.9.6", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-inotify", + "srpm_nevra": "python-inotify-0.9.6-25.el9.src", + "release": "25.el9" + }, + { + "name": "python3-libcomps", + "version": "0.1.18", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libcomps", + "srpm_nevra": "libcomps-0.1.18-1.el9.src", + "release": "1.el9" + }, + { + "name": "python3-libdnf", + "version": "0.69.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "libdnf", + "srpm_nevra": "libdnf-0.69.0-12.el9.src", + "release": "12.el9" + }, + { + "name": "python3-librepo", + "version": "1.14.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "librepo", + "srpm_nevra": "librepo-1.14.5-2.el9.src", + "release": "2.el9" + }, + { + "name": "python3-libs", + "version": "3.9.21", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "python3.9", + "srpm_nevra": "python3.9-3.9.21-1.el9_5.src", + "release": "1.el9_5" + }, + { + "name": "python3-pip-wheel", + "version": "21.3.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-pip", + "srpm_nevra": "python-pip-21.3.1-1.el9.src", + "release": "1.el9" + }, + { + "name": "python3-pysocks", + "version": "1.7.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-pysocks", + "srpm_nevra": "python-pysocks-1.7.1-12.el9.src", + "release": "12.el9" + }, + { + "name": "python3-requests", + "version": "2.25.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-requests", + "srpm_nevra": "python-requests-2.25.1-8.el9.src", + "release": "8.el9" + }, + { + "name": "python3-rpm", + "version": "4.16.1.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "rpm", + "srpm_nevra": "rpm-4.16.1.3-34.el9.src", + "release": "34.el9" + }, + { + "name": "python3-setuptools", + "version": "53.0.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-setuptools", + "srpm_nevra": "python-setuptools-53.0.0-13.el9.src", + "release": "13.el9" + }, + { + "name": "python3-setuptools-wheel", + "version": "53.0.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-setuptools", + "srpm_nevra": "python-setuptools-53.0.0-13.el9.src", + "release": "13.el9" + }, + { + "name": "python3-six", + "version": "1.15.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-six", + "srpm_nevra": "python-six-1.15.0-9.el9.src", + "release": "9.el9" + }, + { + "name": "python3-subscription-manager-rhsm", + "version": "1.29.42", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "subscription-manager", + "srpm_nevra": "subscription-manager-1.29.42-1.el9.src", + "release": "1.el9" + }, + { + "name": "python3-systemd", + "version": "234", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-systemd", + "srpm_nevra": "python-systemd-234-19.el9.src", + "release": "19.el9" + }, + { + "name": "python3-urllib3", + "version": "1.26.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "python-urllib3", + "srpm_nevra": "python-urllib3-1.26.5-6.el9.src", + "release": "6.el9" + }, + { + "name": "readline", + "version": "8.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "readline", + "srpm_nevra": "readline-8.1-4.el9.src", + "release": "4.el9" + }, + { + "name": "redhat-logos-httpd", + "version": "90.4", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "redhat-logos", + "srpm_nevra": "redhat-logos-90.4-2.el9.src", + "release": "2.el9" + }, + { + "name": "redhat-release", + "version": "9.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "redhat-release", + "srpm_nevra": "redhat-release-9.5-0.6.el9.src", + "release": "0.6.el9" + }, + { + "name": "rootfiles", + "version": "8.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "rootfiles", + "srpm_nevra": "rootfiles-8.1-31.el9.src", + "release": "31.el9" + }, + { + "name": "rpm", + "version": "4.16.1.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "rpm", + "srpm_nevra": "rpm-4.16.1.3-34.el9.src", + "release": "34.el9" + }, + { + "name": "rpm-build-libs", + "version": "4.16.1.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "rpm", + "srpm_nevra": "rpm-4.16.1.3-34.el9.src", + "release": "34.el9" + }, + { + "name": "rpm-libs", + "version": "4.16.1.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "rpm", + "srpm_nevra": "rpm-4.16.1.3-34.el9.src", + "release": "34.el9" + }, + { + "name": "rpm-plugin-selinux", + "version": "4.16.1.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "rpm", + "srpm_nevra": "rpm-4.16.1.3-34.el9.src", + "release": "34.el9" + }, + { + "name": "rpm-sign-libs", + "version": "4.16.1.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "rpm", + "srpm_nevra": "rpm-4.16.1.3-34.el9.src", + "release": "34.el9" + }, + { + "name": "rsync", + "version": "3.2.3", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "rsync", + "srpm_nevra": "rsync-3.2.3-20.el9.src", + "release": "20.el9" + }, + { + "name": "scl-utils", + "version": "1:2.0.3", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "scl-utils", + "srpm_nevra": "scl-utils-2.0.3-4.el9.src", + "release": "4.el9" + }, + { + "name": "sed", + "version": "4.8", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "sed", + "srpm_nevra": "sed-4.8-9.el9.src", + "release": "9.el9" + }, + { + "name": "selinux-policy", + "version": "38.1.45", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "selinux-policy", + "srpm_nevra": "selinux-policy-38.1.45-3.el9_5.src", + "release": "3.el9_5" + }, + { + "name": "selinux-policy-targeted", + "version": "38.1.45", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "selinux-policy", + "srpm_nevra": "selinux-policy-38.1.45-3.el9_5.src", + "release": "3.el9_5" + }, + { + "name": "setup", + "version": "2.13.7", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "setup", + "srpm_nevra": "setup-2.13.7-10.el9.src", + "release": "10.el9" + }, + { + "name": "shadow-utils", + "version": "2:4.9", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "shadow-utils", + "srpm_nevra": "shadow-utils-4.9-10.el9_5.src", + "release": "10.el9_5" + }, + { + "name": "sqlite-libs", + "version": "3.34.1", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "sqlite", + "srpm_nevra": "sqlite-3.34.1-7.el9_3.src", + "release": "7.el9_3" + }, + { + "name": "sscg", + "version": "3.0.0", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "sscg", + "srpm_nevra": "sscg-3.0.0-7.el9.src", + "release": "7.el9" + }, + { + "name": "subscription-manager", + "version": "1.29.42", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "subscription-manager", + "srpm_nevra": "subscription-manager-1.29.42-1.el9.src", + "release": "1.el9" + }, + { + "name": "subscription-manager-rhsm-certificates", + "version": "20220623", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "subscription-manager-rhsm-certificates", + "srpm_nevra": "subscription-manager-rhsm-certificates-20220623-1.el9.src", + "release": "1.el9" + }, + { + "name": "systemd", + "version": "252", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "systemd", + "srpm_nevra": "systemd-252-46.el9_5.2.src", + "release": "46.el9_5.2" + }, + { + "name": "systemd-libs", + "version": "252", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "systemd", + "srpm_nevra": "systemd-252-46.el9_5.2.src", + "release": "46.el9_5.2" + }, + { + "name": "systemd-pam", + "version": "252", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "systemd", + "srpm_nevra": "systemd-252-46.el9_5.2.src", + "release": "46.el9_5.2" + }, + { + "name": "systemd-rpm-macros", + "version": "252", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "systemd", + "srpm_nevra": "systemd-252-46.el9_5.2.src", + "release": "46.el9_5.2" + }, + { + "name": "tar", + "version": "2:1.34", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "tar", + "srpm_nevra": "tar-1.34-7.el9.src", + "release": "7.el9" + }, + { + "name": "tcl", + "version": "1:8.6.10", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "tcl", + "srpm_nevra": "tcl-8.6.10-7.el9.src", + "release": "7.el9" + }, + { + "name": "tpm2-tss", + "version": "3.2.3", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "tpm2-tss", + "srpm_nevra": "tpm2-tss-3.2.3-1.el9.src", + "release": "1.el9" + }, + { + "name": "tzdata", + "version": "2024b", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "tzdata", + "srpm_nevra": "tzdata-2024b-2.el9.src", + "release": "2.el9" + }, + { + "name": "unzip", + "version": "6.0", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "unzip", + "srpm_nevra": "unzip-6.0-57.el9.src", + "release": "57.el9" + }, + { + "name": "usermode", + "version": "1.114", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "usermode", + "srpm_nevra": "usermode-1.114-5.el9.src", + "release": "5.el9" + }, + { + "name": "util-linux", + "version": "2.37.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-2.37.4-20.el9.src", + "release": "20.el9" + }, + { + "name": "util-linux-core", + "version": "2.37.4", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-2.37.4-20.el9.src", + "release": "20.el9" + }, + { + "name": "vim-filesystem", + "version": "2:8.2.2637", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "vim", + "srpm_nevra": "vim-8.2.2637-21.el9.src", + "release": "21.el9" + }, + { + "name": "vim-minimal", + "version": "2:8.2.2637", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "vim", + "srpm_nevra": "vim-8.2.2637-21.el9.src", + "release": "21.el9" + }, + { + "name": "virt-what", + "version": "1.25", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "virt-what", + "srpm_nevra": "virt-what-1.25-10.el9.src", + "release": "10.el9" + }, + { + "name": "which", + "version": "2.21", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "which", + "srpm_nevra": "which-2.21-29.el9.src", + "release": "29.el9" + }, + { + "name": "xmlsec1", + "version": "1.2.29", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "xmlsec1", + "srpm_nevra": "xmlsec1-1.2.29-13.el9.src", + "release": "13.el9" + }, + { + "name": "xmlsec1-openssl", + "version": "1.2.29", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "xmlsec1", + "srpm_nevra": "xmlsec1-1.2.29-13.el9.src", + "release": "13.el9" + }, + { + "name": "xz", + "version": "5.2.5", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-baseos-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "xz", + "srpm_nevra": "xz-5.2.5-8.el9_0.src", + "release": "8.el9_0" + }, + { + "name": "xz-libs", + "version": "5.2.5", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "xz", + "srpm_nevra": "xz-5.2.5-8.el9_0.src", + "release": "8.el9_0" + }, + { + "name": "yajl", + "version": "2.1.0", + "kind": "binary", + "_repositoryhint": "repoid=rhel-9-appstream-rpms", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "yajl", + "srpm_nevra": "yajl-2.1.0-22.el9.src", + "release": "22.el9" + }, + { + "name": "yum", + "version": "4.14.0", + "kind": "binary", + "_repositoryhint": "", + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "srpm_name": "dnf", + "srpm_nevra": "dnf-4.14.0-17.el9.src", + "release": "17.el9" + }, + { + "name": "zlib", + "version": "1.2.11", + "kind": "binary", + "_repositoryhint": "", + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "srpm_name": "zlib", + "srpm_nevra": "zlib-1.2.11-40.el9.src", + "release": "40.el9" + } + ] +} diff --git a/rhel/testdata/nodejs.rpm-manifest.json b/rhel/testdata/nodejs.rpm-manifest.json new file mode 100644 index 000000000..845a00384 --- /dev/null +++ b/rhel/testdata/nodejs.rpm-manifest.json @@ -0,0 +1,3019 @@ +{ + "rpms": [ + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "acl", + "release": "3.el9", + "srpm_name": "acl", + "srpm_nevra": "acl-0:2.3.1-3.el9.src", + "version": "2.3.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "alternatives", + "release": "2.el9", + "srpm_name": "chkconfig", + "srpm_nevra": "chkconfig-0:1.20-2.el9.src", + "version": "1.20", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "audit-libs", + "release": "103.el9", + "srpm_name": "audit", + "srpm_nevra": "audit-0:3.0.7-103.el9.src", + "version": "3.0.7", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "basesystem", + "release": "13.el9", + "srpm_name": "basesystem", + "srpm_nevra": "basesystem-0:11-13.el9.src", + "version": "11", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "bash", + "release": "6.el9", + "srpm_name": "bash", + "srpm_nevra": "bash-0:5.1.8-6.el9.src", + "version": "5.1.8", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "binutils", + "release": "37.el9", + "srpm_name": "binutils", + "srpm_nevra": "binutils-0:2.35.2-37.el9.src", + "version": "2.35.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "binutils-gold", + "release": "37.el9", + "srpm_name": "binutils", + "srpm_nevra": "binutils-0:2.35.2-37.el9.src", + "version": "2.35.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "bsdtar", + "release": "4.el9", + "srpm_name": "libarchive", + "srpm_nevra": "libarchive-0:3.5.3-4.el9.src", + "version": "3.5.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "bzip2-libs", + "release": "8.el9", + "srpm_name": "bzip2", + "srpm_nevra": "bzip2-0:1.0.8-8.el9.src", + "version": "1.0.8", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "ca-certificates", + "release": "90.2.el9_0", + "srpm_name": "ca-certificates", + "srpm_nevra": "ca-certificates-0:2022.2.54-90.2.el9_0.src", + "version": "2022.2.54", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "cmake", + "release": "8.el9", + "srpm_name": "cmake", + "srpm_nevra": "cmake-0:3.20.2-8.el9.src", + "version": "3.20.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "cmake-data", + "release": "8.el9", + "srpm_name": "cmake", + "srpm_nevra": "cmake-0:3.20.2-8.el9.src", + "version": "3.20.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "cmake-filesystem", + "release": "8.el9", + "srpm_name": "cmake", + "srpm_nevra": "cmake-0:3.20.2-8.el9.src", + "version": "3.20.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "cmake-rpm-macros", + "release": "8.el9", + "srpm_name": "cmake", + "srpm_nevra": "cmake-0:3.20.2-8.el9.src", + "version": "3.20.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "coreutils-single", + "release": "34.el9", + "srpm_name": "coreutils", + "srpm_nevra": "coreutils-0:8.32-34.el9.src", + "version": "8.32", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "cpp", + "release": "4.3.el9", + "srpm_name": "gcc", + "srpm_nevra": "gcc-0:11.3.1-4.3.el9.src", + "version": "11.3.1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "cracklib", + "release": "27.el9", + "srpm_name": "cracklib", + "srpm_nevra": "cracklib-0:2.9.6-27.el9.src", + "version": "2.9.6", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "cracklib-dicts", + "release": "27.el9", + "srpm_name": "cracklib", + "srpm_nevra": "cracklib-0:2.9.6-27.el9.src", + "version": "2.9.6", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "crypto-policies", + "release": "1.git9a18988.el9", + "srpm_name": "crypto-policies", + "srpm_nevra": "crypto-policies-0:20221215-1.git9a18988.el9.src", + "version": "20221215", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "crypto-policies-scripts", + "release": "1.git9a18988.el9", + "srpm_name": "crypto-policies", + "srpm_nevra": "crypto-policies-0:20221215-1.git9a18988.el9.src", + "version": "20221215", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "curl-minimal", + "release": "23.el9_2.1", + "srpm_name": "curl", + "srpm_nevra": "curl-0:7.76.1-23.el9_2.1.src", + "version": "7.76.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "cyrus-sasl-lib", + "release": "21.el9", + "srpm_name": "cyrus-sasl", + "srpm_nevra": "cyrus-sasl-0:2.1.27-21.el9.src", + "version": "2.1.27", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "dbus", + "release": "7.el9_1", + "srpm_name": "dbus", + "srpm_nevra": "dbus-1:1.12.20-7.el9_1.src", + "version": "1.12.20", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "dbus-broker", + "release": "7.el9", + "srpm_name": "dbus-broker", + "srpm_nevra": "dbus-broker-0:28-7.el9.src", + "version": "28", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "dbus-common", + "release": "7.el9_1", + "srpm_name": "dbus", + "srpm_nevra": "dbus-1:1.12.20-7.el9_1.src", + "version": "1.12.20", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "dbus-libs", + "release": "7.el9_1", + "srpm_name": "dbus", + "srpm_nevra": "dbus-1:1.12.20-7.el9_1.src", + "version": "1.12.20", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "dejavu-sans-fonts", + "release": "18.el9", + "srpm_name": "dejavu-fonts", + "srpm_nevra": "dejavu-fonts-0:2.37-18.el9.src", + "version": "2.37", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "dmidecode", + "release": "7.el9", + "srpm_name": "dmidecode", + "srpm_nevra": "dmidecode-1:3.3-7.el9.src", + "version": "3.3", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "dnf", + "release": "5.el9_2", + "srpm_name": "dnf", + "srpm_nevra": "dnf-0:4.14.0-5.el9_2.src", + "version": "4.14.0", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "dnf-data", + "release": "5.el9_2", + "srpm_name": "dnf", + "srpm_nevra": "dnf-0:4.14.0-5.el9_2.src", + "version": "4.14.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "elfutils-debuginfod-client", + "release": "3.el9", + "srpm_name": "elfutils", + "srpm_nevra": "elfutils-0:0.188-3.el9.src", + "version": "0.188", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "elfutils-default-yama-scope", + "release": "3.el9", + "srpm_name": "elfutils", + "srpm_nevra": "elfutils-0:0.188-3.el9.src", + "version": "0.188", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "elfutils-libelf", + "release": "3.el9", + "srpm_name": "elfutils", + "srpm_nevra": "elfutils-0:0.188-3.el9.src", + "version": "0.188", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "elfutils-libs", + "release": "3.el9", + "srpm_name": "elfutils", + "srpm_nevra": "elfutils-0:0.188-3.el9.src", + "version": "0.188", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "emacs-filesystem", + "release": "8.el9", + "srpm_name": "emacs", + "srpm_nevra": "emacs-27.2-8.el9_2.1.src", + "version": "27.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "environment-modules", + "release": "2.el9", + "srpm_name": "environment-modules", + "srpm_nevra": "environment-modules-0:5.0.1-2.el9.src", + "version": "5.0.1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "expat", + "release": "1.el9", + "srpm_name": "expat", + "srpm_nevra": "expat-0:2.5.0-1.el9.src", + "version": "2.5.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "file-libs", + "release": "12.el9", + "srpm_name": "file", + "srpm_nevra": "file-0:5.39-12.el9.src", + "version": "5.39", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "filesystem", + "release": "2.el9", + "srpm_name": "filesystem", + "srpm_nevra": "filesystem-0:3.16-2.el9.src", + "version": "3.16", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "findutils", + "release": "5.el9", + "srpm_name": "findutils", + "srpm_nevra": "findutils-1:4.8.0-5.el9.src", + "version": "4.8.0", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "fonts-filesystem", + "release": "7.el9.1", + "srpm_name": "fonts-rpm-macros", + "srpm_nevra": "fonts-rpm-macros-1:2.0.5-7.el9.1.src", + "version": "2.0.5", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gawk", + "release": "6.el9", + "srpm_name": "gawk", + "srpm_nevra": "gawk-0:5.1.0-6.el9.src", + "version": "5.1.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gcc", + "release": "4.3.el9", + "srpm_name": "gcc", + "srpm_nevra": "gcc-0:11.3.1-4.3.el9.src", + "version": "11.3.1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gcc-c++", + "release": "4.3.el9", + "srpm_name": "gcc", + "srpm_nevra": "gcc-0:11.3.1-4.3.el9.src", + "version": "11.3.1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gdb-gdbserver", + "release": "10.el9", + "srpm_name": "gdb", + "srpm_nevra": "gdb-0:10.2-10.el9.src", + "version": "10.2", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gdbm-libs", + "release": "4.el9", + "srpm_name": "gdbm", + "srpm_nevra": "gdbm-1:1.19-4.el9.src", + "version": "1.19", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gettext", + "release": "7.el9", + "srpm_name": "gettext", + "srpm_nevra": "gettext-0:0.21-7.el9.src", + "version": "0.21", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gettext-libs", + "release": "7.el9", + "srpm_name": "gettext", + "srpm_nevra": "gettext-0:0.21-7.el9.src", + "version": "0.21", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "git", + "release": "1.el9_2", + "srpm_name": "git", + "srpm_nevra": "git-0:2.39.3-1.el9_2.src", + "version": "2.39.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "git-core", + "release": "1.el9_2", + "srpm_name": "git", + "srpm_nevra": "git-0:2.39.3-1.el9_2.src", + "version": "2.39.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "git-core-doc", + "release": "1.el9_2", + "srpm_name": "git", + "srpm_nevra": "git-0:2.39.3-1.el9_2.src", + "version": "2.39.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "glib2", + "release": "6.el9", + "srpm_name": "glib2", + "srpm_nevra": "glib2-0:2.68.4-6.el9.src", + "version": "2.68.4", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "glibc", + "release": "60.el9", + "srpm_name": "glibc", + "srpm_nevra": "glibc-0:2.34-60.el9.src", + "version": "2.34", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "glibc-common", + "release": "60.el9", + "srpm_name": "glibc", + "srpm_nevra": "glibc-0:2.34-60.el9.src", + "version": "2.34", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "glibc-devel", + "release": "60.el9", + "srpm_name": "glibc", + "srpm_nevra": "glibc-0:2.34-60.el9.src", + "version": "2.34", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "glibc-headers", + "release": "60.el9", + "srpm_name": "glibc", + "srpm_nevra": "glibc-0:2.34-60.el9.src", + "version": "2.34", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "glibc-langpack-en", + "release": "60.el9", + "srpm_name": "glibc", + "srpm_nevra": "glibc-0:2.34-60.el9.src", + "version": "2.34", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "glibc-locale-source", + "release": "60.el9", + "srpm_name": "glibc", + "srpm_nevra": "glibc-0:2.34-60.el9.src", + "version": "2.34", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "glibc-minimal-langpack", + "release": "60.el9", + "srpm_name": "glibc", + "srpm_nevra": "glibc-0:2.34-60.el9.src", + "version": "2.34", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gmp", + "release": "10.el9", + "srpm_name": "gmp", + "srpm_nevra": "gmp-1:6.2.0-10.el9.src", + "version": "6.2.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gnupg2", + "release": "2.el9_0", + "srpm_name": "gnupg2", + "srpm_nevra": "gnupg2-0:2.3.3-2.el9_0.src", + "version": "2.3.3", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gnutls", + "release": "20.el9_2", + "srpm_name": "gnutls", + "srpm_nevra": "gnutls-0:3.7.6-20.el9_2.src", + "version": "3.7.6", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gobject-introspection", + "release": "11.el9", + "srpm_name": "gobject-introspection", + "srpm_nevra": "gobject-introspection-0:1.68.0-11.el9.src", + "version": "1.68.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gpgme", + "release": "6.el9", + "srpm_name": "gpgme", + "srpm_nevra": "gpgme-0:1.15.1-6.el9.src", + "version": "1.15.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "grep", + "release": "5.el9", + "srpm_name": "grep", + "srpm_nevra": "grep-0:3.6-5.el9.src", + "version": "3.6", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "groff-base", + "release": "10.el9", + "srpm_name": "groff", + "srpm_nevra": "groff-0:1.22.4-10.el9.src", + "version": "1.22.4", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "gzip", + "release": "1.el9", + "srpm_name": "gzip", + "srpm_nevra": "gzip-0:1.12-1.el9.src", + "version": "1.12", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "ima-evm-utils", + "release": "4.el9", + "srpm_name": "ima-evm-utils", + "srpm_nevra": "ima-evm-utils-0:1.4-4.el9.src", + "version": "1.4", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "json-c", + "release": "11.el9", + "srpm_name": "json-c", + "srpm_nevra": "json-c-0:0.14-11.el9.src", + "version": "0.14", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "json-glib", + "release": "1.el9", + "srpm_name": "json-glib", + "srpm_nevra": "json-glib-0:1.6.6-1.el9.src", + "version": "1.6.6", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "kernel-headers", + "release": "284.18.1.el9_2", + "srpm_name": "kernel", + "srpm_nevra": "kernel-0:5.14.0-284.18.1.el9_2.src", + "version": "5.14.0", + "_repositoryhint": "repoid=RHEL-9.2.0-updates-20230615.3-AppStream" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "keyutils-libs", + "release": "1.el9", + "srpm_name": "keyutils", + "srpm_nevra": "keyutils-0:1.6.3-1.el9.src", + "version": "1.6.3", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "kmod-libs", + "release": "7.el9", + "srpm_name": "kmod", + "srpm_nevra": "kmod-0:28-7.el9.src", + "version": "28", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "krb5-libs", + "release": "9.el9_2", + "srpm_name": "krb5", + "srpm_nevra": "krb5-0:1.20.1-9.el9_2.src", + "version": "1.20.1", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "langpacks-core-en", + "release": "16.el9", + "srpm_name": "langpacks", + "srpm_nevra": "langpacks-0:3.0-16.el9.src", + "version": "3.0", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "langpacks-core-font-en", + "release": "16.el9", + "srpm_name": "langpacks", + "srpm_nevra": "langpacks-0:3.0-16.el9.src", + "version": "3.0", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "langpacks-en", + "release": "16.el9", + "srpm_name": "langpacks", + "srpm_nevra": "langpacks-0:3.0-16.el9.src", + "version": "3.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "less", + "release": "2.el9_2", + "srpm_name": "less", + "srpm_nevra": "less-0:590-2.el9_2.src", + "version": "590", + "_repositoryhint": "repoid=RHEL-9.2.0-updates-20230615.3-BaseOS" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libacl", + "release": "3.el9", + "srpm_name": "acl", + "srpm_nevra": "acl-0:2.3.1-3.el9.src", + "version": "2.3.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libarchive", + "release": "4.el9", + "srpm_name": "libarchive", + "srpm_nevra": "libarchive-0:3.5.3-4.el9.src", + "version": "3.5.3", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libassuan", + "release": "3.el9", + "srpm_name": "libassuan", + "srpm_nevra": "libassuan-0:2.5.5-3.el9.src", + "version": "2.5.5", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libattr", + "release": "3.el9", + "srpm_name": "attr", + "srpm_nevra": "attr-0:2.5.1-3.el9.src", + "version": "2.5.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libblkid", + "release": "11.el9_2", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-0:2.37.4-11.el9_2.src", + "version": "2.37.4", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libbrotli", + "release": "6.el9", + "srpm_name": "brotli", + "srpm_nevra": "brotli-0:1.0.9-6.el9.src", + "version": "1.0.9", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libcap", + "release": "8.el9", + "srpm_name": "libcap", + "srpm_nevra": "libcap-0:2.48-8.el9.src", + "version": "2.48", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libcap-ng", + "release": "7.el9", + "srpm_name": "libcap-ng", + "srpm_nevra": "libcap-ng-0:0.8.2-7.el9.src", + "version": "0.8.2", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libcbor", + "release": "5.el9", + "srpm_name": "libcbor", + "srpm_nevra": "libcbor-0:0.7.0-5.el9.src", + "version": "0.7.0", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libcom_err", + "release": "3.el9", + "srpm_name": "e2fsprogs", + "srpm_nevra": "e2fsprogs-0:1.46.5-3.el9.src", + "version": "1.46.5", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libcomps", + "release": "1.el9", + "srpm_name": "libcomps", + "srpm_nevra": "libcomps-0:0.1.18-1.el9.src", + "version": "0.1.18", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libcurl-minimal", + "release": "23.el9_2.1", + "srpm_name": "curl", + "srpm_nevra": "curl-0:7.76.1-23.el9_2.1.src", + "version": "7.76.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libdb", + "release": "53.el9", + "srpm_name": "libdb", + "srpm_nevra": "libdb-0:5.3.28-53.el9.src", + "version": "5.3.28", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libdnf", + "release": "3.el9_2", + "srpm_name": "libdnf", + "srpm_nevra": "libdnf-0:0.69.0-3.el9_2.src", + "version": "0.69.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libdnf-plugin-subscription-manager", + "release": "1.el9_2", + "srpm_name": "subscription-manager", + "srpm_nevra": "subscription-manager-0:1.29.33.1-1.el9_2.src", + "version": "1.29.33.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libeconf", + "release": "2.el9", + "srpm_name": "libeconf", + "srpm_nevra": "libeconf-0:0.4.1-2.el9.src", + "version": "0.4.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libedit", + "release": "37.20210216cvs.el9", + "srpm_name": "libedit", + "srpm_nevra": "libedit-0:3.1-37.20210216cvs.el9.src", + "version": "3.1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libevent", + "release": "6.el9", + "srpm_name": "libevent", + "srpm_nevra": "libevent-0:2.1.12-6.el9.src", + "version": "2.1.12", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libfdisk", + "release": "11.el9_2", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-0:2.37.4-11.el9_2.src", + "version": "2.37.4", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libffi", + "release": "7.el9", + "srpm_name": "libffi", + "srpm_nevra": "libffi-0:3.4.2-7.el9.src", + "version": "3.4.2", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libfido2", + "release": "7.el9", + "srpm_name": "libfido2", + "srpm_nevra": "libfido2-0:1.6.0-7.el9.src", + "version": "1.6.0", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libgcc", + "release": "4.3.el9", + "srpm_name": "gcc", + "srpm_nevra": "gcc-0:11.3.1-4.3.el9.src", + "version": "11.3.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libgcrypt", + "release": "10.el9_2", + "srpm_name": "libgcrypt", + "srpm_nevra": "libgcrypt-0:1.10.0-10.el9_2.src", + "version": "1.10.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libgomp", + "release": "4.3.el9", + "srpm_name": "gcc", + "srpm_nevra": "gcc-0:11.3.1-4.3.el9.src", + "version": "11.3.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libgpg-error", + "release": "5.el9", + "srpm_name": "libgpg-error", + "srpm_nevra": "libgpg-error-0:1.42-5.el9.src", + "version": "1.42", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libidn2", + "release": "7.el9", + "srpm_name": "libidn2", + "srpm_nevra": "libidn2-0:2.3.0-7.el9.src", + "version": "2.3.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libksba", + "release": "6.el9_1", + "srpm_name": "libksba", + "srpm_nevra": "libksba-0:1.5.1-6.el9_1.src", + "version": "1.5.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libmodulemd", + "release": "2.el9", + "srpm_name": "libmodulemd", + "srpm_nevra": "libmodulemd-0:2.13.0-2.el9.src", + "version": "2.13.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libmount", + "release": "11.el9_2", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-0:2.37.4-11.el9_2.src", + "version": "2.37.4", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libmpc", + "release": "4.el9", + "srpm_name": "libmpc", + "srpm_nevra": "libmpc-0:1.2.1-4.el9.src", + "version": "1.2.1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libnghttp2", + "release": "5.el9", + "srpm_name": "nghttp2", + "srpm_nevra": "nghttp2-0:1.43.0-5.el9.src", + "version": "1.43.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libnl3", + "release": "1.el9", + "srpm_name": "libnl3", + "srpm_nevra": "libnl3-0:3.7.0-1.el9.src", + "version": "3.7.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libpipeline", + "release": "4.el9", + "srpm_name": "libpipeline", + "srpm_nevra": "libpipeline-0:1.5.3-4.el9.src", + "version": "1.5.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libpkgconf", + "release": "10.el9", + "srpm_name": "pkgconf", + "srpm_nevra": "pkgconf-0:1.7.3-10.el9.src", + "version": "1.7.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libpwquality", + "release": "8.el9", + "srpm_name": "libpwquality", + "srpm_nevra": "libpwquality-0:1.4.4-8.el9.src", + "version": "1.4.4", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "librepo", + "release": "1.el9", + "srpm_name": "librepo", + "srpm_nevra": "librepo-0:1.14.5-1.el9.src", + "version": "1.14.5", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "libreport-filesystem", + "release": "6.el9", + "srpm_name": "libreport", + "srpm_nevra": "libreport-0:2.15.2-6.el9.src", + "version": "2.15.2", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "librhsm", + "release": "7.el9", + "srpm_name": "librhsm", + "srpm_nevra": "librhsm-0:0.0.3-7.el9.src", + "version": "0.0.3", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libseccomp", + "release": "2.el9", + "srpm_name": "libseccomp", + "srpm_nevra": "libseccomp-0:2.5.2-2.el9.src", + "version": "2.5.2", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libselinux", + "release": "1.el9", + "srpm_name": "libselinux", + "srpm_nevra": "libselinux-0:3.5-1.el9.src", + "version": "3.5", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libsemanage", + "release": "1.el9", + "srpm_name": "libsemanage", + "srpm_nevra": "libsemanage-0:3.5-1.el9.src", + "version": "3.5", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libsepol", + "release": "1.el9", + "srpm_name": "libsepol", + "srpm_nevra": "libsepol-0:3.5-1.el9.src", + "version": "3.5", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libsigsegv", + "release": "4.el9", + "srpm_name": "libsigsegv", + "srpm_nevra": "libsigsegv-0:2.13-4.el9.src", + "version": "2.13", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libsmartcols", + "release": "11.el9", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-0:2.37.4-11.el9.src", + "version": "2.37.4", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libsolv", + "release": "4.el9", + "srpm_name": "libsolv", + "srpm_nevra": "libsolv-0:0.7.22-4.el9.src", + "version": "0.7.22", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libstdc++", + "release": "4.3.el9", + "srpm_name": "gcc", + "srpm_nevra": "gcc-0:11.3.1-4.3.el9.src", + "version": "11.3.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libstdc++-devel", + "release": "4.3.el9", + "srpm_name": "gcc", + "srpm_nevra": "gcc-0:11.3.1-4.3.el9.src", + "version": "11.3.1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libtasn1", + "release": "8.el9_1", + "srpm_name": "libtasn1", + "srpm_nevra": "libtasn1-0:4.16.0-8.el9_1.src", + "version": "4.16.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libunistring", + "release": "15.el9", + "srpm_name": "libunistring", + "srpm_nevra": "libunistring-0:0.9.10-15.el9.src", + "version": "0.9.10", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libuser", + "release": "12.el9", + "srpm_name": "libuser", + "srpm_nevra": "libuser-0:0.63-12.el9.src", + "version": "0.63", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libutempter", + "release": "6.el9", + "srpm_name": "libutempter", + "srpm_nevra": "libutempter-0:1.2.1-6.el9.src", + "version": "1.2.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libuuid", + "release": "11.el9_2", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-0:2.37.4-11.el9_2.src", + "version": "2.37.4", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libuv", + "release": "1.el9", + "srpm_name": "libuv", + "srpm_nevra": "libuv-1:1.42.0-1.el9.src", + "version": "1.42.0", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libverto", + "release": "3.el9", + "srpm_name": "libverto", + "srpm_nevra": "libverto-0:0.3.2-3.el9.src", + "version": "0.3.2", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libxcrypt", + "release": "3.el9", + "srpm_name": "libxcrypt", + "srpm_nevra": "libxcrypt-0:4.4.18-3.el9.src", + "version": "4.4.18", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libxcrypt-devel", + "release": "3.el9", + "srpm_name": "libxcrypt", + "srpm_nevra": "libxcrypt-0:4.4.18-3.el9.src", + "version": "4.4.18", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libxml2", + "release": "3.el9_1", + "srpm_name": "libxml2", + "srpm_nevra": "libxml2-0:2.9.13-3.el9_1.src", + "version": "2.9.13", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libyaml", + "release": "7.el9", + "srpm_name": "libyaml", + "srpm_nevra": "libyaml-0:0.2.5-7.el9.src", + "version": "0.2.5", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "libzstd", + "release": "2.el9", + "srpm_name": "zstd", + "srpm_nevra": "zstd-0:1.5.1-2.el9.src", + "version": "1.5.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "lua-libs", + "release": "3.el9", + "srpm_name": "lua", + "srpm_nevra": "lua-0:5.4.4-3.el9.src", + "version": "5.4.4", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "lz4-libs", + "release": "5.el9", + "srpm_name": "lz4", + "srpm_nevra": "lz4-0:1.9.3-5.el9.src", + "version": "1.9.3", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "make", + "release": "7.el9", + "srpm_name": "make", + "srpm_nevra": "make-1:4.3-7.el9.src", + "version": "4.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "man-db", + "release": "7.el9", + "srpm_name": "man-db", + "srpm_nevra": "man-db-0:2.9.3-7.el9.src", + "version": "2.9.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "mpfr", + "release": "7.el9", + "srpm_name": "mpfr", + "srpm_nevra": "mpfr-0:4.1.0-7.el9.src", + "version": "4.1.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "ncurses", + "release": "8.20210508.el9", + "srpm_name": "ncurses", + "srpm_nevra": "ncurses-0:6.2-8.20210508.el9.src", + "version": "6.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "ncurses-base", + "release": "8.20210508.el9", + "srpm_name": "ncurses", + "srpm_nevra": "ncurses-0:6.2-8.20210508.el9.src", + "version": "6.2", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "ncurses-libs", + "release": "8.20210508.el9", + "srpm_name": "ncurses", + "srpm_nevra": "ncurses-0:6.2-8.20210508.el9.src", + "version": "6.2", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "nettle", + "release": "3.el9_0", + "srpm_name": "nettle", + "srpm_nevra": "nettle-0:3.8-3.el9_0.src", + "version": "3.8", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "nodejs", + "release": "3.module+el9.2.0.z+18964+42696395", + "srpm_name": "nodejs", + "srpm_nevra": "nodejs-18.14.2-3.module+el9.2.0.z+18964+42696395.src", + "module": "nodejs:18", + "version": "18.14.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "nodejs-docs", + "release": "3.module+el9.2.0.z+18964+42696395", + "srpm_name": "nodejs", + "srpm_nevra": "nodejs-18.14.2-3.module+el9.2.0.z+18964+42696395.src", + "module": "nodejs:18", + "version": "18.14.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "nodejs-full-i18n", + "release": "3.module+el9.2.0.z+18964+42696395", + "srpm_name": "nodejs", + "srpm_nevra": "nodejs-18.14.2-3.module+el9.2.0.z+18964+42696395.src", + "module": "nodejs:18", + "version": "18.14.2", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "nodejs-nodemon", + "release": "2.module+el9.2.0.z+18497+a402347c", + "srpm_name": "nodejs-nodemon", + "srpm_nevra": "nodejs-nodemon-0:2.0.20-2.module+el9.2.0.z+18497+a402347c.src", + "module": "nodejs:18", + "version": "2.0.20", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "npm", + "release": "1.18.14.2.3.module+el9.2.0.z+18964+42696395", + "srpm_name": "nodejs", + "srpm_nevra": "nodejs-18.14.2-3.module+el9.2.0.z+18964+42696395.src", + "module": "nodejs:18", + "version": "1:9.5.0", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "npth", + "release": "8.el9", + "srpm_name": "npth", + "srpm_nevra": "npth-0:1.6-8.el9.src", + "version": "1.6", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "nss_wrapper", + "release": "1.el9", + "srpm_name": "nss_wrapper", + "srpm_nevra": "nss_wrapper-0:1.1.13-1.el9.src", + "version": "1.1.13", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "nss_wrapper-libs", + "release": "1.el9", + "srpm_name": "nss_wrapper", + "srpm_nevra": "nss_wrapper-0:1.1.13-1.el9.src", + "version": "1.1.13", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "openldap", + "release": "3.el9", + "srpm_name": "openldap", + "srpm_nevra": "openldap-0:2.6.2-3.el9.src", + "version": "2.6.2", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "openldap-compat", + "release": "3.el9", + "srpm_name": "openldap", + "srpm_nevra": "openldap-0:2.6.2-3.el9.src", + "version": "2.6.2", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "openssh", + "release": "29.el9_2", + "srpm_name": "openssh", + "srpm_nevra": "openssh-0:8.7p1-29.el9_2.src", + "version": "8.7p1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "openssh-clients", + "release": "29.el9_2", + "srpm_name": "openssh", + "srpm_nevra": "openssh-0:8.7p1-29.el9_2.src", + "version": "8.7p1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "openssl", + "release": "16.el9_2", + "srpm_name": "openssl", + "srpm_nevra": "openssl-3.0.7-16.el9_2.src", + "version": "3.0.7", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "openssl-devel", + "release": "16.el9_2", + "srpm_name": "openssl", + "srpm_nevra": "openssl-3.0.7-16.el9_2.src", + "version": "3.0.7", + "_repositoryhint": "repoid=RHEL-9.2.0-updates-20230615.3-AppStream" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "openssl-libs", + "release": "16.el9_2", + "srpm_name": "openssl", + "srpm_nevra": "openssl-3.0.7-16.el9_2.src", + "version": "3.0.7", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "p11-kit", + "release": "2.el9", + "srpm_name": "p11-kit", + "srpm_nevra": "p11-kit-0:0.24.1-2.el9.src", + "version": "0.24.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "p11-kit-trust", + "release": "2.el9", + "srpm_name": "p11-kit", + "srpm_nevra": "p11-kit-0:0.24.1-2.el9.src", + "version": "0.24.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "pam", + "release": "14.el9", + "srpm_name": "pam", + "srpm_nevra": "pam-0:1.5.1-14.el9.src", + "version": "1.5.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "passwd", + "release": "12.el9", + "srpm_name": "passwd", + "srpm_nevra": "passwd-0:0.80-12.el9.src", + "version": "0.80", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "pcre", + "release": "3.el9.3", + "srpm_name": "pcre", + "srpm_nevra": "pcre-0:8.44-3.el9.3.src", + "version": "8.44", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "pcre2", + "release": "2.el9", + "srpm_name": "pcre2", + "srpm_nevra": "pcre2-0:10.40-2.el9.src", + "version": "10.40", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "pcre2-syntax", + "release": "2.el9", + "srpm_name": "pcre2", + "srpm_nevra": "pcre2-0:10.40-2.el9.src", + "version": "10.40", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-AutoLoader", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "5.74", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-B", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.80", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Carp", + "release": "460.el9", + "srpm_name": "perl-Carp", + "srpm_nevra": "perl-Carp-0:1.50-460.el9.src", + "version": "1.50", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Class-Struct", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "0.66", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-Data-Dumper", + "release": "462.el9", + "srpm_name": "perl-Data-Dumper", + "srpm_nevra": "perl-Data-Dumper-0:2.174-462.el9.src", + "version": "2.174", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Digest", + "release": "4.el9", + "srpm_name": "perl-Digest", + "srpm_nevra": "perl-Digest-0:1.19-4.el9.src", + "version": "1.19", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-Digest-MD5", + "release": "4.el9", + "srpm_name": "perl-Digest-MD5", + "srpm_nevra": "perl-Digest-MD5-0:2.58-4.el9.src", + "version": "2.58", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-DynaLoader", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.47", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-Encode", + "release": "462.el9", + "srpm_name": "perl-Encode", + "srpm_nevra": "perl-Encode-4:3.08-462.el9.src", + "version": "3.08", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-Errno", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.30", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Error", + "release": "7.el9", + "srpm_name": "perl-Error", + "srpm_nevra": "perl-Error-1:0.17029-7.el9.src", + "version": "0.17029", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Exporter", + "release": "461.el9", + "srpm_name": "perl-Exporter", + "srpm_nevra": "perl-Exporter-0:5.74-461.el9.src", + "version": "5.74", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-Fcntl", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.13", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-File-Basename", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "2.85", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-File-Find", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.37", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-File-Path", + "release": "4.el9", + "srpm_name": "perl-File-Path", + "srpm_nevra": "perl-File-Path-0:2.18-4.el9.src", + "version": "2.18", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-File-Temp", + "release": "4.el9", + "srpm_name": "perl-File-Temp", + "srpm_nevra": "perl-File-Temp-1:0.231.100-4.el9.src", + "version": "0.231.100", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-File-stat", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.09", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-FileHandle", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "2.03", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Getopt-Long", + "release": "4.el9", + "srpm_name": "perl-Getopt-Long", + "srpm_nevra": "perl-Getopt-Long-1:2.52-4.el9.src", + "version": "2.52", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Getopt-Std", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.12", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Git", + "release": "1.el9_2", + "srpm_name": "git", + "srpm_nevra": "git-0:2.39.3-1.el9_2.src", + "version": "2.39.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-HTTP-Tiny", + "release": "460.el9", + "srpm_name": "perl-HTTP-Tiny", + "srpm_nevra": "perl-HTTP-Tiny-0:0.076-460.el9.src", + "version": "0.076", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-IO", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.43", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-IO-Socket-IP", + "release": "5.el9", + "srpm_name": "perl-IO-Socket-IP", + "srpm_nevra": "perl-IO-Socket-IP-0:0.41-5.el9.src", + "version": "0.41", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-IO-Socket-SSL", + "release": "1.el9", + "srpm_name": "perl-IO-Socket-SSL", + "srpm_nevra": "perl-IO-Socket-SSL-0:2.073-1.el9.src", + "version": "2.073", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-IPC-Open3", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.21", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-MIME-Base64", + "release": "4.el9", + "srpm_name": "perl-MIME-Base64", + "srpm_nevra": "perl-MIME-Base64-0:3.16-4.el9.src", + "version": "3.16", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Mozilla-CA", + "release": "6.el9", + "srpm_name": "perl-Mozilla-CA", + "srpm_nevra": "perl-Mozilla-CA-0:20200520-6.el9.src", + "version": "20200520", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-NDBM_File", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.15", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-Net-SSLeay", + "release": "2.el9", + "srpm_name": "perl-Net-SSLeay", + "srpm_nevra": "perl-Net-SSLeay-0:1.92-2.el9.src", + "version": "1.92", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-POSIX", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.94", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-PathTools", + "release": "461.el9", + "srpm_name": "perl-PathTools", + "srpm_nevra": "perl-PathTools-0:3.78-461.el9.src", + "version": "3.78", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Pod-Escapes", + "release": "460.el9", + "srpm_name": "perl-Pod-Escapes", + "srpm_nevra": "perl-Pod-Escapes-1:1.07-460.el9.src", + "version": "1.07", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Pod-Perldoc", + "release": "461.el9", + "srpm_name": "perl-Pod-Perldoc", + "srpm_nevra": "perl-Pod-Perldoc-0:3.28.01-461.el9.src", + "version": "3.28.01", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Pod-Simple", + "release": "4.el9", + "srpm_name": "perl-Pod-Simple", + "srpm_nevra": "perl-Pod-Simple-1:3.42-4.el9.src", + "version": "3.42", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Pod-Usage", + "release": "4.el9", + "srpm_name": "perl-Pod-Usage", + "srpm_nevra": "perl-Pod-Usage-4:2.01-4.el9.src", + "version": "2.01", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-Scalar-List-Utils", + "release": "461.el9", + "srpm_name": "perl-Scalar-List-Utils", + "srpm_nevra": "perl-Scalar-List-Utils-4:1.56-461.el9.src", + "version": "1.56", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-SelectSaver", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.02", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-Socket", + "release": "4.el9", + "srpm_name": "perl-Socket", + "srpm_nevra": "perl-Socket-4:2.031-4.el9.src", + "version": "2.031", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-Storable", + "release": "460.el9", + "srpm_name": "perl-Storable", + "srpm_nevra": "perl-Storable-1:3.21-460.el9.src", + "version": "3.21", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Symbol", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.08", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Term-ANSIColor", + "release": "461.el9", + "srpm_name": "perl-Term-ANSIColor", + "srpm_nevra": "perl-Term-ANSIColor-0:5.01-461.el9.src", + "version": "5.01", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Term-Cap", + "release": "460.el9", + "srpm_name": "perl-Term-Cap", + "srpm_nevra": "perl-Term-Cap-0:1.17-460.el9.src", + "version": "1.17", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-TermReadKey", + "release": "11.el9", + "srpm_name": "perl-TermReadKey", + "srpm_nevra": "perl-TermReadKey-0:2.38-11.el9.src", + "version": "2.38", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Text-ParseWords", + "release": "460.el9", + "srpm_name": "perl-Text-ParseWords", + "srpm_nevra": "perl-Text-ParseWords-0:3.30-460.el9.src", + "version": "3.30", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Text-Tabs+Wrap", + "release": "460.el9", + "srpm_name": "perl-Text-Tabs+Wrap", + "srpm_nevra": "perl-Text-Tabs+Wrap-0:2013.0523-460.el9.src", + "version": "2013.0523", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-Time-Local", + "release": "7.el9", + "srpm_name": "perl-Time-Local", + "srpm_nevra": "perl-Time-Local-2:1.300-7.el9.src", + "version": "1.300", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-URI", + "release": "3.el9", + "srpm_name": "perl-URI", + "srpm_nevra": "perl-URI-0:5.09-3.el9.src", + "version": "5.09", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-base", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "2.27", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-constant", + "release": "461.el9", + "srpm_name": "perl-constant", + "srpm_nevra": "perl-constant-0:1.33-461.el9.src", + "version": "1.33", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-if", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "0.60.800", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-interpreter", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "5.32.1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-lib", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "0.65", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-libnet", + "release": "4.el9", + "srpm_name": "perl-libnet", + "srpm_nevra": "perl-libnet-0:3.13-4.el9.src", + "version": "3.13", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-libs", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "5.32.1", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "perl-mro", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.23", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-overload", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.31", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-overloading", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "0.02", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-parent", + "release": "460.el9", + "srpm_name": "perl-parent", + "srpm_nevra": "perl-parent-1:0.238-460.el9.src", + "version": "0.238", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-podlators", + "release": "460.el9", + "srpm_name": "perl-podlators", + "srpm_nevra": "perl-podlators-1:4.14-460.el9.src", + "version": "4.14", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-subs", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.03", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "perl-vars", + "release": "480.el9", + "srpm_name": "perl", + "srpm_nevra": "perl-4:5.32.1-480.el9.src", + "version": "1.05", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "pkgconf", + "release": "10.el9", + "srpm_name": "pkgconf", + "srpm_nevra": "pkgconf-0:1.7.3-10.el9.src", + "version": "1.7.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "pkgconf-m4", + "release": "10.el9", + "srpm_name": "pkgconf", + "srpm_nevra": "pkgconf-0:1.7.3-10.el9.src", + "version": "1.7.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "pkgconf-pkg-config", + "release": "10.el9", + "srpm_name": "pkgconf", + "srpm_nevra": "pkgconf-0:1.7.3-10.el9.src", + "version": "1.7.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "popt", + "release": "8.el9", + "srpm_name": "popt", + "srpm_nevra": "popt-0:1.18-8.el9.src", + "version": "1.18", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "procps-ng", + "release": "11.el9", + "srpm_name": "procps-ng", + "srpm_nevra": "procps-ng-0:3.3.17-11.el9.src", + "version": "3.3.17", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3", + "release": "1.el9_2.1", + "srpm_name": "python3.9", + "srpm_nevra": "python3.9-0:3.9.16-1.el9_2.1.src", + "version": "3.9.16", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-chardet", + "release": "5.el9", + "srpm_name": "python-chardet", + "srpm_nevra": "python-chardet-0:4.0.0-5.el9.src", + "version": "4.0.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-cloud-what", + "release": "1.el9_2", + "srpm_name": "subscription-manager", + "srpm_nevra": "subscription-manager-0:1.29.33.1-1.el9_2.src", + "version": "1.29.33.1", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-dateutil", + "release": "6.el9", + "srpm_name": "python-dateutil", + "srpm_nevra": "python-dateutil-1:2.8.1-6.el9.src", + "version": "2.8.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-dbus", + "release": "2.el9", + "srpm_name": "dbus-python", + "srpm_nevra": "dbus-python-0:1.2.18-2.el9.src", + "version": "1.2.18", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-decorator", + "release": "6.el9", + "srpm_name": "python-decorator", + "srpm_nevra": "python-decorator-0:4.4.2-6.el9.src", + "version": "4.4.2", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-dnf", + "release": "5.el9_2", + "srpm_name": "dnf", + "srpm_nevra": "dnf-0:4.14.0-5.el9_2.src", + "version": "4.14.0", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-dnf-plugins-core", + "release": "5.el9_2", + "srpm_name": "dnf-plugins-core", + "srpm_nevra": "dnf-plugins-core-0:4.3.0-5.el9_2.src", + "version": "4.3.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-ethtool", + "release": "2.el9", + "srpm_name": "python-ethtool", + "srpm_nevra": "python-ethtool-0:0.15-2.el9.src", + "version": "0.15", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-gobject-base", + "release": "6.el9", + "srpm_name": "pygobject3", + "srpm_nevra": "pygobject3-0:3.40.1-6.el9.src", + "version": "3.40.1", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-gobject-base-noarch", + "release": "6.el9", + "srpm_name": "pygobject3", + "srpm_nevra": "pygobject3-0:3.40.1-6.el9.src", + "version": "3.40.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-gpg", + "release": "6.el9", + "srpm_name": "gpgme", + "srpm_nevra": "gpgme-0:1.15.1-6.el9.src", + "version": "1.15.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-hawkey", + "release": "3.el9_2", + "srpm_name": "libdnf", + "srpm_nevra": "libdnf-0:0.69.0-3.el9_2.src", + "version": "0.69.0", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-idna", + "release": "7.el9", + "srpm_name": "python-idna", + "srpm_nevra": "python-idna-0:2.10-7.el9.src", + "version": "2.10", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-iniparse", + "release": "45.el9", + "srpm_name": "python-iniparse", + "srpm_nevra": "python-iniparse-0:0.4-45.el9.src", + "version": "0.4", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-inotify", + "release": "25.el9", + "srpm_name": "python-inotify", + "srpm_nevra": "python-inotify-0:0.9.6-25.el9.src", + "version": "0.9.6", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-libcomps", + "release": "1.el9", + "srpm_name": "libcomps", + "srpm_nevra": "libcomps-0:0.1.18-1.el9.src", + "version": "0.1.18", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-libdnf", + "release": "3.el9_2", + "srpm_name": "libdnf", + "srpm_nevra": "libdnf-0:0.69.0-3.el9_2.src", + "version": "0.69.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-librepo", + "release": "1.el9", + "srpm_name": "librepo", + "srpm_nevra": "librepo-0:1.14.5-1.el9.src", + "version": "1.14.5", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-libs", + "release": "1.el9_2.1", + "srpm_name": "python3.9", + "srpm_nevra": "python3.9-0:3.9.16-1.el9_2.1.src", + "version": "3.9.16", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-pip-wheel", + "release": "6.el9", + "srpm_name": "python-pip", + "srpm_nevra": "python-pip-0:21.2.3-6.el9.src", + "version": "21.2.3", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-pysocks", + "release": "12.el9", + "srpm_name": "python-pysocks", + "srpm_nevra": "python-pysocks-0:1.7.1-12.el9.src", + "version": "1.7.1", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-requests", + "release": "6.el9", + "srpm_name": "python-requests", + "srpm_nevra": "python-requests-0:2.25.1-6.el9.src", + "version": "2.25.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-rpm", + "release": "22.el9", + "srpm_name": "rpm", + "srpm_nevra": "rpm-0:4.16.1.3-22.el9.src", + "version": "4.16.1.3", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-setuptools", + "release": "12.el9", + "srpm_name": "python-setuptools", + "srpm_nevra": "python-setuptools-0:53.0.0-12.el9.src", + "version": "53.0.0", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-setuptools-wheel", + "release": "12.el9", + "srpm_name": "python-setuptools", + "srpm_nevra": "python-setuptools-0:53.0.0-12.el9.src", + "version": "53.0.0", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-six", + "release": "9.el9", + "srpm_name": "python-six", + "srpm_nevra": "python-six-0:1.15.0-9.el9.src", + "version": "1.15.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-subscription-manager-rhsm", + "release": "1.el9_2", + "srpm_name": "subscription-manager", + "srpm_nevra": "subscription-manager-0:1.29.33.1-1.el9_2.src", + "version": "1.29.33.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "python3-systemd", + "release": "18.el9", + "srpm_name": "python-systemd", + "srpm_nevra": "python-systemd-234-18.el9.src", + "version": "234", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "python3-urllib3", + "release": "3.el9", + "srpm_name": "python-urllib3", + "srpm_nevra": "python-urllib3-0:1.26.5-3.el9.src", + "version": "1.26.5", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "readline", + "release": "4.el9", + "srpm_name": "readline", + "srpm_nevra": "readline-0:8.1-4.el9.src", + "version": "8.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "redhat-release", + "release": "0.13.el9", + "srpm_name": "redhat-release", + "srpm_nevra": "redhat-release-0:9.2-0.13.el9.src", + "version": "9.2", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "rootfiles", + "release": "31.el9", + "srpm_name": "rootfiles", + "srpm_nevra": "rootfiles-0:8.1-31.el9.src", + "version": "8.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "rpm", + "release": "22.el9", + "srpm_name": "rpm", + "srpm_nevra": "rpm-0:4.16.1.3-22.el9.src", + "version": "4.16.1.3", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "rpm-build-libs", + "release": "22.el9", + "srpm_name": "rpm", + "srpm_nevra": "rpm-0:4.16.1.3-22.el9.src", + "version": "4.16.1.3", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "rpm-libs", + "release": "22.el9", + "srpm_name": "rpm", + "srpm_nevra": "rpm-0:4.16.1.3-22.el9.src", + "version": "4.16.1.3", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "rpm-sign-libs", + "release": "22.el9", + "srpm_name": "rpm", + "srpm_nevra": "rpm-0:4.16.1.3-22.el9.src", + "version": "4.16.1.3", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "rsync", + "release": "19.el9", + "srpm_name": "rsync", + "srpm_nevra": "rsync-0:3.2.3-19.el9.src", + "version": "3.2.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "scl-utils", + "release": "4.el9", + "srpm_name": "scl-utils", + "srpm_nevra": "scl-utils-1:2.0.3-4.el9.src", + "version": "2.0.3", + "_repositoryhint": "repoid=rhel-9-for-x86_64-appstream-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "sed", + "release": "9.el9", + "srpm_name": "sed", + "srpm_nevra": "sed-0:4.8-9.el9.src", + "version": "4.8", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "setup", + "release": "9.el9", + "srpm_name": "setup", + "srpm_nevra": "setup-0:2.13.7-9.el9.src", + "version": "2.13.7", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "shadow-utils", + "release": "6.el9", + "srpm_name": "shadow-utils", + "srpm_nevra": "shadow-utils-2:4.9-6.el9.src", + "version": "4.9", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "sqlite-libs", + "release": "6.el9_1", + "srpm_name": "sqlite", + "srpm_nevra": "sqlite-0:3.34.1-6.el9_1.src", + "version": "3.34.1", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "subscription-manager", + "release": "1.el9_2", + "srpm_name": "subscription-manager", + "srpm_nevra": "subscription-manager-0:1.29.33.1-1.el9_2.src", + "version": "1.29.33.1", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "subscription-manager-rhsm-certificates", + "release": "1.el9", + "srpm_name": "subscription-manager-rhsm-certificates", + "srpm_nevra": "subscription-manager-rhsm-certificates-0:20220623-1.el9.src", + "version": "20220623", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "systemd", + "release": "14.el9_2.1", + "srpm_name": "systemd", + "srpm_nevra": "systemd-0:252-14.el9_2.1.src", + "version": "252", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "systemd-libs", + "release": "14.el9_2.1", + "srpm_name": "systemd", + "srpm_nevra": "systemd-0:252-14.el9_2.1.src", + "version": "252", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "systemd-pam", + "release": "14.el9_2.1", + "srpm_name": "systemd", + "srpm_nevra": "systemd-0:252-14.el9_2.1.src", + "version": "252", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "systemd-rpm-macros", + "release": "14.el9_2.1", + "srpm_name": "systemd", + "srpm_nevra": "systemd-0:252-14.el9_2.1.src", + "version": "252", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "tar", + "release": "6.el9_1", + "srpm_name": "tar", + "srpm_nevra": "tar-2:1.34-6.el9_1.src", + "version": "1.34", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "tcl", + "release": "7.el9", + "srpm_name": "tcl", + "srpm_nevra": "tcl-1:8.6.10-7.el9.src", + "version": "8.6.10", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "tpm2-tss", + "release": "8.el9", + "srpm_name": "tpm2-tss", + "srpm_nevra": "tpm2-tss-0:3.0.3-8.el9.src", + "version": "3.0.3", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "tzdata", + "release": "1.el9", + "srpm_name": "tzdata", + "srpm_nevra": "tzdata-0:2023c-1.el9.src", + "version": "2023c", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "unzip", + "release": "56.el9", + "srpm_name": "unzip", + "srpm_nevra": "unzip-0:6.0-56.el9.src", + "version": "6.0", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "usermode", + "release": "4.el9", + "srpm_name": "usermode", + "srpm_nevra": "usermode-0:1.114-4.el9.src", + "version": "1.114", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "util-linux", + "release": "11.el9_2", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-0:2.37.4-11.el9_2.src", + "version": "2.37.4", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "util-linux-core", + "release": "11.el9_2", + "srpm_name": "util-linux", + "srpm_nevra": "util-linux-0:2.37.4-11.el9_2.src", + "version": "2.37.4", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "vim-filesystem", + "release": "20.el9_1", + "srpm_name": "vim", + "srpm_nevra": "vim-2:8.2.2637-20.el9_1.src", + "version": "8.2.2637", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "vim-minimal", + "release": "20.el9_1", + "srpm_name": "vim", + "srpm_nevra": "vim-2:8.2.2637-20.el9_1.src", + "version": "8.2.2637", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "virt-what", + "release": "3.el9", + "srpm_name": "virt-what", + "srpm_nevra": "virt-what-0:1.25-3.el9.src", + "version": "1.25", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "which", + "release": "28.el9", + "srpm_name": "which", + "srpm_nevra": "which-0:2.21-28.el9.src", + "version": "2.21", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "xz", + "release": "8.el9_0", + "srpm_name": "xz", + "srpm_nevra": "xz-0:5.2.5-8.el9_0.src", + "version": "5.2.5", + "_repositoryhint": "repoid=rhel-9-for-x86_64-baseos-rpms" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "xz-libs", + "release": "8.el9_0", + "srpm_name": "xz", + "srpm_nevra": "xz-0:5.2.5-8.el9_0.src", + "version": "5.2.5", + "_repositoryhint": "" + }, + { + "architecture": "noarch", + "gpg": "199e2f91fd431d51", + "name": "yum", + "release": "5.el9_2", + "srpm_name": "dnf", + "srpm_nevra": "dnf-0:4.14.0-5.el9.src", + "version": "4.14.0", + "_repositoryhint": "" + }, + { + "architecture": "x86_64", + "gpg": "199e2f91fd431d51", + "name": "zlib", + "release": "39.el9", + "srpm_name": "zlib", + "srpm_nevra": "zlib-0:1.2.11-39.el9.src", + "version": "1.2.11", + "_repositoryhint": "" + } + ] +} From 02166291b0200ec0fb282d5b46454efa5c63c6ae Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 22 Jan 2025 14:03:58 -0600 Subject: [PATCH 13/31] rhel: fix testcase names Signed-off-by: Hank Donnay --- rhel/matcher_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rhel/matcher_test.go b/rhel/matcher_test.go index 26cd2eb32..dc8f62a3c 100644 --- a/rhel/matcher_test.go +++ b/rhel/matcher_test.go @@ -272,13 +272,13 @@ func TestIsCPEStringSubsetMatch(t *testing.T) { match bool }{ { - name: "simple_case", + name: "Simple", recordCPE: cpe.MustUnbind("cpe:/a:redhat:openshift:4.13::el8"), vulnCPE: cpe.MustUnbind("cpe:/a:redhat:openshift:4"), match: true, }, { - name: "wrong_minor", + name: "WrongMinor", recordCPE: cpe.MustUnbind("cpe:/a:redhat:openshift:4.13::el8"), vulnCPE: cpe.MustUnbind("cpe:/a:redhat:openshift:4.1::el8"), match: false, From bf9fb2546a41e13e038cbf691c980eb4ad40dc22 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 22 Jan 2025 14:05:18 -0600 Subject: [PATCH 14/31] rhel: have repository scanner consult dnf Signed-off-by: Hank Donnay --- rhel/repositoryscanner.go | 175 +++++++++++++++++++++------------ rhel/repositoryscanner_test.go | 64 ++++++++---- 2 files changed, 160 insertions(+), 79 deletions(-) diff --git a/rhel/repositoryscanner.go b/rhel/repositoryscanner.go index d1f2f53f1..843da2e3a 100644 --- a/rhel/repositoryscanner.go +++ b/rhel/repositoryscanner.go @@ -12,6 +12,7 @@ import ( "os" "path/filepath" "runtime/trace" + "slices" "strings" "time" @@ -19,6 +20,7 @@ import ( "github.com/quay/claircore" "github.com/quay/claircore/indexer" + "github.com/quay/claircore/internal/dnf" "github.com/quay/claircore/internal/zreader" "github.com/quay/claircore/rhel/dockerfile" "github.com/quay/claircore/rhel/internal/common" @@ -26,25 +28,25 @@ import ( "github.com/quay/claircore/toolkit/types/cpe" ) -/* -RepositoryScanner implements repository detection logic for RHEL. - -The RHEL detection logic needs outside information because the Red Hat build -system does not (and did not, in the past) store the relevant information in the -layer itself. In addition, dnf and yum do not persist provenance information -outside of a cache and rpm considers such information outside its baliwick. - -In the case of the RHEL ecosystem, "repository" is a bit of a misnomer, as -advisories are tracked on the Product level, and so Clair's "repository" data is -used instead to indicate a Product. This mismatch can lead to apparent -duplications in reporting. For example, if an advisory is marked as affecting -"cpe:/a:redhat:enterprise_linux:8" and -"cpe:/a:redhat:enterprise_linux:8::appstream", this results in two advisories -being recorded. (CPEs do not namespace the way this example may imply; that is -to say, the latter is not "contained in" or a "member of" the former.) If a -layer reports that it is both the "cpe:/a:redhat:enterprise_linux:8" and -"cpe:/a:redhat:enterprise_linux:8::appstream" layer, then both advisories match. -*/ +// RepositoryScanner implements repository detection logic for RHEL. +// +// The RHEL detection logic needs outside information because the Red Hat build +// system does not (and did not, in the past) store the relevant information in +// the layer itself. In addition, dnf and yum do not persist provenance +// information outside of a cache and rpm considers such information outside its +// baliwick. +// +// In the case of the RHEL ecosystem, "repository" is a bit of a misnomer, as +// advisories are tracked on the Product level, and so Clair's "repository" data +// is used instead to indicate a Product. This mismatch can lead to apparent +// duplication in reporting. For example, if an advisory is marked as affecting +// "cpe:/a:redhat:enterprise_linux:8" and +// "cpe:/a:redhat:enterprise_linux:8::appstream", this results in two advisories +// being recorded. (CPEs do not namespace the way this example may imply; that +// is to say, the latter is not "contained in" or a "member of" the former.) If +// a layer reports that it is both the "cpe:/a:redhat:enterprise_linux:8" and +// "cpe:/a:redhat:enterprise_linux:8::appstream" layer, then both advisories +// match. type RepositoryScanner struct { // These members are created after the Configure call. upd *common.Updater @@ -72,8 +74,6 @@ var ( // - If both the "URL" and "File" are provided, the file will be loaded // initially and then updated periodically from the URL. type RepositoryScannerConfig struct { - // DisableAPI disables the use of the API. - DisableAPI bool `json:"disable_api" yaml:"disable_api"` // API is the URL to talk to the Red Hat Container API. // // See [DefaultContainerAPI] and [containerapi.ContainerAPI]. @@ -91,6 +91,8 @@ type RepositoryScannerConfig struct { // // The default is 10 seconds. Timeout time.Duration `json:"timeout" yaml:"timeout"` + // DisableAPI disables the use of the API. + DisableAPI bool `json:"disable_api" yaml:"disable_api"` } const ( @@ -110,7 +112,7 @@ const ( func (*RepositoryScanner) Name() string { return "rhel-repository-scanner" } // Version implements [indexer.VersionedScanner]. -func (*RepositoryScanner) Version() string { return "1.2" } +func (*RepositoryScanner) Version() string { return "2" } // Kind implements [indexer.VersionedScanner]. func (*RepositoryScanner) Kind() string { return "repository" } @@ -180,7 +182,7 @@ func (r *RepositoryScanner) Configure(ctx context.Context, f indexer.ConfigDeser } // Scan implements [indexer.RepositoryScanner]. -func (r *RepositoryScanner) Scan(ctx context.Context, l *claircore.Layer) (repositories []*claircore.Repository, err error) { +func (r *RepositoryScanner) Scan(ctx context.Context, l *claircore.Layer) ([]*claircore.Repository, error) { defer trace.StartRegion(ctx, "Scanner.Scan").End() ctx = zlog.ContextWithValues(ctx, "component", "rhel/RepositoryScanner.Scan", @@ -204,24 +206,74 @@ func (r *RepositoryScanner) Scan(ctx context.Context, l *claircore.Layer) (repos if !ok || cm == nil { return []*claircore.Repository{}, fmt.Errorf("rhel: unable to create a mappingFile object") } - CPEs, err := mapContentSets(ctx, sys, cm) + + // First, look at DNF. + repoids, err := dnf.FindRepoids(ctx, sys) + switch { + case err != nil: // continue to error check and return + case len(repoids) == 0: + // If DNF yielded nothing, check for content-sets data. + repoids, err = repoidsFromContentSets(ctx, sys) + default: + } if err != nil { return []*claircore.Repository{}, err } - if CPEs == nil && r.apiFetcher != nil { - // Embedded content-sets are available only for new images. - // For old images, use fallback option and query Red Hat Container API. - ctx, done := context.WithTimeout(ctx, r.cfg.Timeout) - defer done() - CPEs, err = mapContainerAPI(ctx, sys, r.apiFetcher) + + pairs := func(yield func(string, string) bool) { + var found bool + for _, repoid := range repoids { + cpes, ok := cm.GetOne(ctx, repoid) + if !ok { + continue + } + found = true + for _, cpe := range cpes { + if !yield(repoid, cpe) { + return + } + } + } + if found { + return + } + + if r.apiFetcher != nil { + // Embedded content-sets are unavailable in very old images. + // For these, use fallback option and query Red Hat Container API. + ctx, done := context.WithTimeout(ctx, r.cfg.Timeout) + defer done() + + // !!! This ends up being a weird nonlocal return. !!! + var cpes []string + cpes, err = mapContainerAPI(ctx, sys, r.apiFetcher) + if err != nil { + zlog.Warn(ctx). + Err(err). + Msg("container API error") + return + } + for _, cpe := range cpes { + if !yield("", cpe) { + return + } + } + } + } + var repositories []*claircore.Repository + for repoid, cpeID := range pairs { + // TODO(hank) Remove these ContainerAPI hacks: + // Start ContainerAPI hacks if err != nil { return []*claircore.Repository{}, err } - } + if repoid == "" { + repoid = cpeID + } + // End ContainerAPI hacks - for _, cpeID := range CPEs { r := &claircore.Repository{ - Name: cpeID, + Name: repoid, Key: repositoryKey, } r.CPE, err = cpe.Unbind(cpeID) @@ -236,17 +288,29 @@ func (r *RepositoryScanner) Scan(ctx context.Context, l *claircore.Layer) (repos repositories = append(repositories, r) } + slices.SortFunc(repositories, func(a, b *claircore.Repository) int { + if ord := strings.Compare(a.Name, b.Name); ord != 0 { + return ord + } + if ord := strings.Compare(a.CPE.BindFS(), b.CPE.BindFS()); ord != 0 { + return ord + } + return 0 + }) + repositories = slices.CompactFunc(repositories, func(a, b *claircore.Repository) bool { + return a.Name == b.Name && a.CPE.BindFS() == b.CPE.BindFS() + }) return repositories, nil } -// MapContentSets returns a slice of CPEs bound into strings, as discovered by -// examining information contained within the container. -func mapContentSets(ctx context.Context, sys fs.FS, cm *mappingFile) ([]string, error) { - // Get CPEs using embedded content-set files. - // The files are stored in /root/buildinfo/content_manifests/ and will need to - // be translated using mapping file provided by Red Hat's PST team. - // For RHCOS, the files are stored in /usr/share/buildinfo/. +// RepoidsFromContentSets returns a slice of repoids, as discovered by examining +// information contained within the container. +func repoidsFromContentSets(ctx context.Context, sys fs.FS) ([]string, error) { + // Get repoids using embedded content-set files. The files are stored in + // /root/buildinfo/content_manifests/ and will need to be translated using + // mapping file provided by Red Hat's PST team. For RHCOS, the files are + // stored in /usr/share/buildinfo/. ms, err := fs.Glob(sys, `root/buildinfo/content_manifests/*.json`) if err != nil { panic("programmer error: " + err.Error()) @@ -286,7 +350,7 @@ func mapContentSets(ctx context.Context, sys fs.FS, cm *mappingFile) ([]string, if len(m.ContentSets) == 0 { return nil, nil } - return cm.Get(ctx, m.ContentSets) + return m.ContentSets, nil } // MappingFile is a data struct for mapping file between repositories and CPEs @@ -299,27 +363,16 @@ type repo struct { CPEs []string `json:"cpes"` } -func (m *mappingFile) Get(ctx context.Context, rs []string) ([]string, error) { - s := map[string]struct{}{} - for _, r := range rs { - cpes, ok := m.Data[r] - if !ok { - zlog.Debug(ctx). - Str("repository", r). - Msg("repository not present in a mapping file") - continue - } - for _, cpe := range cpes.CPEs { - s[cpe] = struct{}{} - } +// GetOne takes a repoid and reports the CPEs and if the repoid was known +// beforehand. +func (m *mappingFile) GetOne(ctx context.Context, repoid string) (cpes []string, ok bool) { + if repo, ok := m.Data[repoid]; ok { + return repo.CPEs, true } - - i, r := 0, make([]string, len(s)) - for k := range s { - r[i] = k - i++ - } - return r, nil + zlog.Debug(ctx). + Str("repository", repoid). + Msg("repository not present in a mapping file") + return nil, false } // ContentManifest structure is the data provided by OSBS. diff --git a/rhel/repositoryscanner_test.go b/rhel/repositoryscanner_test.go index 389653ad9..ced544f75 100644 --- a/rhel/repositoryscanner_test.go +++ b/rhel/repositoryscanner_test.go @@ -103,17 +103,22 @@ func TestRepositoryScanner(t *testing.T) { name: "FromMappingUrl", want: []*claircore.Repository{ { - Name: "cpe:/o:redhat:enterprise_linux:6::server", + Name: "content-set-1", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:6::server"), }, { - Name: "cpe:/o:redhat:enterprise_linux:7::server", + Name: "content-set-1", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:7::server"), }, { - Name: "cpe:/o:redhat:enterprise_linux:8::server", + Name: "content-set-2", + Key: repositoryKey, + CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:7::server"), + }, + { + Name: "content-set-2", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:8::server"), }, @@ -125,17 +130,22 @@ func TestRepositoryScanner(t *testing.T) { name: "FromMappingFile", want: []*claircore.Repository{ { - Name: "cpe:/o:redhat:enterprise_linux:6::server", + Name: "content-set-1", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:6::server"), }, { - Name: "cpe:/o:redhat:enterprise_linux:7::server", + Name: "content-set-1", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:7::server"), }, { - Name: "cpe:/o:redhat:enterprise_linux:8::server", + Name: "content-set-2", + Key: repositoryKey, + CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:7::server"), + }, + { + Name: "content-set-2", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:8::server"), }, @@ -147,17 +157,22 @@ func TestRepositoryScanner(t *testing.T) { name: "FromMappingFileAirGap", want: []*claircore.Repository{ { - Name: "cpe:/o:redhat:enterprise_linux:6::server", + Name: "content-set-1", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:6::server"), }, { - Name: "cpe:/o:redhat:enterprise_linux:7::server", + Name: "content-set-1", + Key: repositoryKey, + CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:7::server"), + }, + { + Name: "content-set-2", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:7::server"), }, { - Name: "cpe:/o:redhat:enterprise_linux:8::server", + Name: "content-set-2", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:8::server"), }, @@ -176,47 +191,60 @@ func TestRepositoryScanner(t *testing.T) { want: nil, cfg: &RepositoryScannerConfig{DisableAPI: true}, layerPath: "testdata/layer-with-embedded-cs.tar", - }, { + }, + { name: "BadContentManifestsFile", want: nil, cfg: &RepositoryScannerConfig{API: srv.URL, Repo2CPEMappingURL: srv.URL + "/repository-2-cpe.json"}, layerPath: "testdata/layer-with-invalid-content-manifests-json.tar", - }, { + }, + { name: "RHCOSLayerFromMappingFile", want: []*claircore.Repository{ { - Name: "cpe:/o:redhat:enterprise_linux:6::server", + Name: "content-set-1", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:6::server"), }, { - Name: "cpe:/o:redhat:enterprise_linux:7::server", + Name: "content-set-1", + Key: repositoryKey, + CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:7::server"), + }, + { + Name: "content-set-2", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:7::server"), }, { - Name: "cpe:/o:redhat:enterprise_linux:8::server", + Name: "content-set-2", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:8::server"), }, }, cfg: &RepositoryScannerConfig{Repo2CPEMappingFile: f.Name()}, layerPath: "testdata/rhcos-layer-with-embedded-cs.tar", - }, { + }, + { name: "RHCOSLayerFromMappingFileWithConflictingFiles", want: []*claircore.Repository{ { - Name: "cpe:/o:redhat:enterprise_linux:6::server", + Name: "content-set-1", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:6::server"), }, { - Name: "cpe:/o:redhat:enterprise_linux:7::server", + Name: "content-set-1", + Key: repositoryKey, + CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:7::server"), + }, + { + Name: "content-set-2", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:7::server"), }, { - Name: "cpe:/o:redhat:enterprise_linux:8::server", + Name: "content-set-2", Key: repositoryKey, CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:8::server"), }, From 70c6574a5da36e2c003d836279163714fa741c56 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 22 Jan 2025 14:08:00 -0600 Subject: [PATCH 15/31] rhel: use repoids in coalescer Signed-off-by: Hank Donnay --- rhel/coalescer.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/rhel/coalescer.go b/rhel/coalescer.go index 2e1ab9046..9153a1557 100644 --- a/rhel/coalescer.go +++ b/rhel/coalescer.go @@ -2,6 +2,7 @@ package rhel import ( "context" + "net/url" "github.com/quay/claircore" "github.com/quay/claircore/indexer" @@ -61,9 +62,11 @@ func (*Coalescer) Coalesce(ctx context.Context, artifacts []*indexer.LayerArtifa // This dance with copying the product information in both directions means // that if Red Hat product information is found, it "taints" all the layers. + // Break the key-by-ID convention because we need to talk about the repo + // name in the package matching step. for _, a := range artifacts { for _, repo := range a.Repos { - ir.Repositories[repo.ID] = repo + ir.Repositories[repo.Name] = repo } } // In our coalescing logic if a Distribution is found in layer "n" all packages found @@ -116,10 +119,15 @@ func (*Coalescer) Coalesce(ctx context.Context, artifacts []*indexer.LayerArtifa PackageDB: pkg.PackageDB, IntroducedIn: layerArtifacts.Hash, DistributionID: distID, - RepositoryIDs: make([]string, len(layerArtifacts.Repos)), } - for i := range layerArtifacts.Repos { - environment.RepositoryIDs[i] = layerArtifacts.Repos[i].ID + v, _ := url.ParseQuery(pkg.RepositoryHint) + if id := v.Get("repoid"); id != "" { + environment.RepositoryIDs = v["repoid"] + } else { + environment.RepositoryIDs = make([]string, len(layerArtifacts.Repos)) + for i := range layerArtifacts.Repos { + environment.RepositoryIDs[i] = layerArtifacts.Repos[i].Name + } } db.packages[pkg.ID] = pkg db.environments[pkg.ID] = environment From 91d5928655b13c294a9f4f526eed8f91c432715e Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Tue, 13 May 2025 15:59:36 -0500 Subject: [PATCH 16/31] rhel: rework tests in light of repoid information Signed-off-by: Hank Donnay --- rhel/packagescanner_test.go | 190 ++++++++++++---------- rhel/testdata/package/ubi8_ubi.txtar | 26 +++ rhel/testdata/package/ubi9_httpd-24.txtar | 26 +++ rhel/testdata/package/ubi9_ubi.txtar | 26 +++ 4 files changed, 183 insertions(+), 85 deletions(-) create mode 100644 rhel/testdata/package/ubi8_ubi.txtar create mode 100644 rhel/testdata/package/ubi9_httpd-24.txtar create mode 100644 rhel/testdata/package/ubi9_ubi.txtar diff --git a/rhel/packagescanner_test.go b/rhel/packagescanner_test.go index 0d758350c..a7b7ea5b0 100644 --- a/rhel/packagescanner_test.go +++ b/rhel/packagescanner_test.go @@ -2,113 +2,133 @@ package rhel import ( "context" - "os" "path/filepath" + "slices" + "strings" "testing" "github.com/google/go-cmp/cmp" "github.com/quay/zlog" "github.com/quay/claircore" + "github.com/quay/claircore/internal/wart" "github.com/quay/claircore/test" "github.com/quay/claircore/test/rpmtest" ) -func TestPackageScanner(t *testing.T) { - t.Parallel() +//go:generate -command fetch go run github.com/quay/claircore/test/cmd/fetch-container-rpm-manifest +//go:generate fetch -o testdata/package/ubi8_ubi.txtar ubi8/ubi +//go:generate fetch -o testdata/package/ubi9_ubi.txtar ubi9/ubi +//go:generate fetch -o testdata/package/ubi9_httpd-24.txtar ubi9/httpd-24 + +func TestPackageDetection(t *testing.T) { ctx := zlog.Test(context.Background(), t) + ms, err := filepath.Glob("testdata/package/*.txtar") + if err != nil { + panic("programmer error") // static glob + } a := test.NewCachedArena(t) - defer func() { + t.Cleanup(func() { if err := a.Close(ctx); err != nil { t.Error(err) } - }() - - tt := []PackageTestcase{ - { - Name: "BDB", - ManifestFile: "bdb.rpm-manifest.json", - // Some forgotten CentOS layer. - Ref: test.LayerRef{ - Registry: "docker.io", - Name: "library/centos", - Digest: `sha256:729ec3a6ada3a6d26faca9b4779a037231f1762f759ef34c08bdd61bf52cd704`, - }, - }, - { - Name: "NodeJS", - ManifestFile: "nodejs.rpm-manifest.json", - // Layer from registry.access.redhat.com/ubi9/nodejs-18@sha256:1ff5080686736cbab820ec560873c59bd80659a2b2f8d8f4e379301a910e5d54 - Ref: test.LayerRef{ - Registry: "registry.access.redhat.com", - Name: "ubi9/nodejs-18", - Digest: `sha256:1ae06b64755052cef4c32979aded82a18f664c66fa7b50a6d2924afac2849c6e`, - }, - }, - { - Name: "Httpd24NoContentSets", - ManifestFile: "httpd-24_9.5-1734525854.rpm-manifest.json", - // Layer from registry.access.redhat.com/ubi9/httpd-24:9.5-1734525854 - Ref: test.LayerRef{ - Registry: "registry.access.redhat.com", - Name: "ubi9/httpd-24", - Digest: `sha256:572f60f98d5ae116073fa5f8c576fc014afdcd4c68875e37c37032ad2772f653`, - }, - }, - } - for _, tc := range tt { - t.Run(tc.Name, tc.Run(ctx, a)) + }) + // BUG(hank) The repoid information seems to not currently exist in Pyxis. + // The tests here use a hard-coded allowlist. + repoAllow := map[string][]string{ + "registry.access.redhat.com/ubi9/httpd-24": {"RHEL-9.0.0-updates-20220503.2-AppStream", "RHEL-9.0.0-updates-20220503.2-BaseOS"}, } -} - -type PackageTestcase struct { - Name string - ManifestFile string - Ref test.LayerRef -} - -func (tc PackageTestcase) Run(ctx context.Context, a *test.CachedArena) func(*testing.T) { - s := &PackageScanner{} - return func(t *testing.T) { - t.Parallel() - ctx := zlog.Test(ctx, t) - a.LoadLayerFromRegistry(ctx, t, tc.Ref) - wf, err := os.Open(filepath.Join("testdata/", tc.ManifestFile)) - if err != nil { - t.Fatal(err) - } - t.Cleanup(func() { - if err := wf.Close(); err != nil { - t.Error(err) - } - }) - want := rpmtest.PackagesFromRPMManifest(t, wf) - r := a.Realizer(ctx).(*test.CachedRealizer) - t.Cleanup(func() { - if err := r.Close(); err != nil { - t.Error(err) - } - }) - ls, err := r.RealizeDescriptions(ctx, []claircore.LayerDescription{ - { - Digest: tc.Ref.Digest, - URI: "http://example.com", - MediaType: test.MediaType, - Headers: make(map[string][]string), - }, - }) - if err != nil { - t.Fatal(err) - } - got, err := s.Scan(ctx, &ls[0]) + for _, m := range ms { + ar, err := rpmtest.OpenArchive(ctx, m) if err != nil { t.Error(err) + continue } - t.Logf("found %d packages", len(got)) - if !cmp.Equal(got, want, rpmtest.Options(t)) { - t.Error(cmp.Diff(got, want, rpmtest.Options(t))) + + for _, ref := range ar.Repositories() { + t.Run(ref, func(t *testing.T) { + t.Parallel() + + arches := map[string]struct{}{} + reg, repo, _ := strings.Cut(ref, "/") + imgs, err := ar.Image(reg, repo) + if err != nil { + t.Fatal(err) + } + + for _, img := range imgs.Data { + // Only consider the first listed instance of an + // architecture, since that's the only rpm manifest that + // will be populated. + if _, skip := arches[img.Archtecture]; skip { + continue + } + arches[img.Archtecture] = struct{}{} + + t.Run(img.Archtecture, func(t *testing.T) { + ctx := zlog.Test(ctx, t) + m, err := ar.Manifest(img.ID) + if err != nil { + t.Fatal(err) + } + + repos := repoAllow[ref] + for _, r := range img.ParsedData.Repos { + repos = append(repos, r.ID) + } + t.Logf("allowlisting rpm repositories: %#v", repos) + + var got []*claircore.Package + // Start with the top-most layer. + for i, digest := range img.ParsedData.Layers { + layerRef := test.LayerRef{ + Registry: reg, + Name: repo, + Digest: digest, + } + + // Fetch the layer via the test caching machinery. + a.LoadLayerFromRegistry(ctx, t, layerRef) + r := a.Realizer(ctx).(*test.CachedRealizer) + t.Cleanup(func() { + if err := r.Close(); err != nil { + t.Error(err) + } + }) + ls, err := r.RealizeDescriptions(ctx, []claircore.LayerDescription{ + { + Digest: digest, + URI: "http://example.com", + MediaType: test.MediaType, + Headers: make(map[string][]string), + }, + }) + if err != nil { + t.Fatal(err) + } + + got, err = new(PackageScanner).Scan(ctx, &ls[0]) + if err != nil { + t.Error(err) + } + if len(got) != 0 { + break + } + t.Logf("skipped layer %d (%s): no packages", i+1, digest) + } + + seq := rpmtest.PackagesFromManifest(t, slices.Values(m.RPMs)) + want := wart.CollectPointer(seq) + + opts := rpmtest.Options(t, repos) + if !cmp.Equal(got, want, opts) { + t.Error(cmp.Diff(got, want, opts)) + } + }) + } + }) } } } diff --git a/rhel/testdata/package/ubi8_ubi.txtar b/rhel/testdata/package/ubi8_ubi.txtar new file mode 100644 index 000000000..e1e167adf --- /dev/null +++ b/rhel/testdata/package/ubi8_ubi.txtar @@ -0,0 +1,26 @@ +Generator: fetch-container-rpm-manifest +Version: (devel) +Created: 2025-05-13T15:03:37-05:00 +Search-Term: repository:ubi8/ubi +Url: https://access.redhat.com/hydra/rest/search/kcs?fl=id%2Crepository%2Cregistry%2Cparsed_data_layers&fq=documentKind%3A%22ContainerRepository%22&fq=-eol_date%3A%5B%2A+TO+NOW%5D&fq=repository%3Aubi8%2Fubi&q=%2A&redhat_client=claircore%2Ffetch-container-rpm-manifest&rows=10 +Url: https://catalog.redhat.com/api/containers/v1/repositories/id/5c359854d70cc534b3a3784e +Url: https://catalog.redhat.com/api/containers/v1/repositories/registry/registry.access.redhat.com/repository/ubi8/ubi/images?exclude=data.brew%2Cdata.certified%2Cdata.container_grades%2Cdata.content_sets%2Cdata.cpe_ids%2Cdata.docker_image_id%2Cdata.freshness_grades%2Cdata.parsed_data.command%2Cdata.parsed_data.comment%2Cdata.parsed_data.docker_version%2Cdata.parsed_data.env_variables%2Cdata.parsed_data.labels%2Cdata.parsed_data.ports%2Cdata.parsed_data.size%2Cdata.parsed_data.uncompressed_size_bytes%2Cdata.parsed_data.user%2Cdata.raw_config%2Cdata.repositories%2Cdata.sum_layer_size_bytes%2Cdata.top_layer_id%2Cdata.uncompressed_top_layer_id&filter=deleted%21%3Dtrue&page=0&page_size=6&sort_by=creation_date%5Basc%5D +Url: https://catalog.redhat.com/api/containers/v1/images/id/5cc9ca3ddd19c7782937e026/rpm-manifest +Url: https://catalog.redhat.com/api/containers/v1/images/id/5cc9ca3fdd19c7782937e02c/rpm-manifest +Url: https://catalog.redhat.com/api/containers/v1/images/id/5cc9ca42dd19c7782937e032/rpm-manifest +Url: https://catalog.redhat.com/api/containers/v1/images/id/5cc9ca44dd19c7782937e03e/rpm-manifest + +-- access.redhat.com/hydra/rest/search/kcs -- +{"spellcheck":{"collations":[],"suggestions":[]},"response":{"docs":[{"parsed_data_layers":["sha256:58379e595e248ff9da9e51f17234ebae3b1434ca01031ae2d62caa28e714a222"],"registry":"registry.access.redhat.com","id":"5c359854d70cc534b3a3784e","repository":"ubi8/ubi"}],"numFound":1,"start":0,"maxScore":2,"numFoundExact":true},"responseHeader":{"QTime":35,"zkConnected":true,"params":{"ps":"3","bf":"if(exists(pulls_in_last_30_days),sqrt(log(map(pulls_in_last_30_days,0,0,1))),1)","fl":"id,repository,registry,parsed_data_layers","q.op":"AND","fq":["documentKind:\"ContainerRepository\"","-eol_date:[* TO NOW]","repository:ubi8/ubi"," -documentKind:( ApplicationAttribute )","-accessState:(private OR retired) AND -hasPublishedRevision:false","-doNotDisplay:true"],"isAuthenticated":"false","ps2":"3","q.orig":"*","ps3":"3","defType":"edismax","spellcheck.q":"*","trace":["host: restprod04","method: GET","uri: /rs/search","route: portal","collection: access"],"redhat_client":"claircore/fetch-container-rpm-manifest","qf":"psfa^10.0 psfb^5.5 psfc^4.5 psfd^3.5 psfe^4.0 psff^2.5 psfg^2.0","matchtype":"exact","hl.fl":"abstract","wt":"json","mm":"0","start":"0","sort":"score desc,id asc","rows":"10","reqId":"ID-hydra-search-api-prod-57-7tsbg-1747146228218-0-164317","isInternal":"false","q":"*","enableElevation":"true","spellcheck":"true","pf":"psfa^12.0 psfb^5.0 psfc^4.0 psfd^3.5 psfe^4.0 psff^2.5 psfg^2.0","boost":["map(query({!field f='view_uri' v='https://access.redhat.com/downloads/content/package-browser'}), 0, 0, 1, 260.64342)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/8409'}), 0, 0, 1, 124.98317)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/914003'}), 0, 0, 1, 122.75514)","map(query({!field f='view_uri' v='https://access.redhat.com/solutions/29036'}), 0, 0, 1, 121.28655)","map(query({!field f='view_uri' v='https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/considerations_in_adopting_rhel_9/'}), 0, 0, 1, 105.7091)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/1378093'}), 0, 0, 1, 82.3566)","map(query({!field f='view_uri' v='https://access.redhat.com/solutions/4078831'}), 0, 0, 1, 79.10734)","map(query({!field f='view_uri' v='https://access.redhat.com/discussions/4311201'}), 0, 0, 1, 63.29097)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/simple-content-access'}), 0, 0, 1, 60.65626)","map(query({!field f='view_uri' v='https://access.redhat.com/solutions/17215'}), 0, 0, 1, 58.7909)"],"showRetired":"false","pf3":"psfa^7.0 psfb^3.0 psfc^3.5 psfd^2.5 psfe^2.5 psff^1.0 psfg^1.0","pf2":"psfa^2.0 psfb^1.5 psfc^1.0 psfd^1.0 psfe^1.5 psff^1.0 psfg^1.0"},"status":0}} +-- catalog.redhat.com/api/containers/v1/repositories/id/5c359854d70cc534b3a3784e -- +{"_id":"5c359854d70cc534b3a3784e","application_categories":["Operating System"],"architectures":["Base Image"],"auto_rebuild_tags":["latest"],"build_categories":["Scratch image"],"can_auto_release_cve_rebuild":false,"content_stream_grades":[{"grade":"A","image_ids":[{"arch":"s390x","id":"67ff7613cf7feea6ecdd0954"},{"arch":"arm64","id":"67ff761617ac1cd8d6f2722b"},{"arch":"amd64","id":"67ff76174fc3c4d9e9d8c544"},{"arch":"ppc64le","id":"67ff7619fbeb816f6606c09c"}],"tag":"latest"}],"content_stream_tags":["latest"],"creation_date":"2019-01-09T06:44:36.544000+00:00","description":"Provides the latest release of the Red Hat Universal Base Image 8","display_data":{"long_description":"

The Universal Base Image is designed and engineered to be the base layer for all of your containerized applications, middleware and utilities. This base image is freely redistributable, but Red Hat only supports Red Hat technologies through subscriptions for Red Hat products. This image is maintained by Red Hat and updated regularly.

","long_description_markdown":"The Universal Base Image is designed and engineered to be the base layer for all of your containerized applications, middleware and utilities. This base image is freely redistributable, but Red Hat only supports Red Hat technologies through subscriptions for Red Hat products. This image is maintained by Red Hat and updated regularly.","name":"Red Hat Universal Base Image 8","openshift_tags":"base, ubi, ubi8, universal base image","short_description":"Provides the latest release of the Red Hat Universal Base Image 8."},"documentation_links":[{"title":"Understanding the UBI standard images","type":"Documentation","url":"https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/building_running_and_managing_containers/index#con_understanding-the-ubi-standard-images_assembly_types-of-container-images"}],"fbc_opt_in":false,"freshness_grades_unknown_until_date":null,"includes_multiple_content_streams":false,"last_update_date":"2025-05-06T12:38:22.770000+00:00","metadata_source":"quay","namespace":"ubi8","non_production_only":false,"object_type":"containerRepository","privileged_images_allowed":false,"product_listings":["5ec53f50ef29fd35586d9a56"],"protected_for_pull":false,"protected_for_search":false,"published":true,"registry":"registry.access.redhat.com","registry_target":"redhat-prod","release_categories":["Generally Available"],"repository":"ubi8/ubi","requires_terms":false,"source_container_image_enabled":true,"total_size_bytes":29126602125,"total_uncompressed_size_bytes":86228596819,"use_latest":true,"vendor_label":"redhat","_links":{"certification_project":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi8/ubi/projects/certification"},"images":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi8/ubi/images"},"operator_bundles":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi8/ubi/operators/bundles"},"product_listings":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi8/ubi/product-listings"},"vendor":{"href":"/v1/vendors/label/redhat"}}} +-- catalog.redhat.com/api/containers/v1/repositories/registry/registry.access.redhat.com/repository/ubi8/ubi/images -- +{"data":[{"_id":"5cc9ca3ddd19c7782937e026","architecture":"amd64","creation_date":"2019-05-01T16:33:01.431000+00:00","image_id":"sha256:fc84b5febd328eccaa913807716887b3eb5ed08bc22cc6933a9ebf82766725e3","last_update_date":"2024-09-06T10:09:55.434000+00:00","object_type":"containerImage","parsed_data":{"architecture":"amd64","created":"2019-04-25T16:26:28.425556Z","layers":["sha256:6a5240d60dc4e1ade0d103badb2a897e8103ebf0ebe08350cd582bbc9671cc7a","sha256:787f47dbeaac926cc8c927a48e8a84fc97e05fbd1c08a4c9c4ddcaddfd87e2f7"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:c613b100be1645941fded703dd6037e5aba7c9388fd1fcb37c2f9f73bc438126","size_bytes":3514},{"layer_id":"sha256:24d85c895b6b870f6b84327a5e31aa567a5d30588de0a0bdd9a669ec5012339c","size_bytes":207551435}]},"_links":{"artifacts":{"href":"/v1/images/id/5cc9ca3ddd19c7782937e026/artifacts"},"requests":{"href":"/v1/images/id/5cc9ca3ddd19c7782937e026/requests"},"rpm_manifest":{"href":"/v1/images/id/5cc9ca3ddd19c7782937e026/rpm-manifest"},"test_results":{"href":"/v1/images/id/5cc9ca3ddd19c7782937e026/test-results"},"vulnerabilities":{"href":"/v1/images/id/5cc9ca3ddd19c7782937e026/vulnerabilities"}}},{"_id":"5cc9ca3fdd19c7782937e02c","architecture":"arm64","creation_date":"2019-05-01T16:33:03.924000+00:00","image_id":"sha256:7c9bc776305d1c1936e64e8654368b0823007d1a26feae7d42d2d61b409441e8","last_update_date":"2024-09-06T10:10:01.043000+00:00","object_type":"containerImage","parsed_data":{"architecture":"arm64","created":"2019-04-25T16:26:55.276398Z","layers":["sha256:5c81e99f07ac7e7097717a822ba3e0391688cfb60e88448c47dc8831a6bbd45f","sha256:c8eae873ab5f8062f94c6044f709b82048cc855535677aab3461835d6e05e959"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:411c5f46d8008dd59111739feb651bbd05b74c3fde71a30efe963eb37fea065f","size_bytes":3513},{"layer_id":"sha256:c49242bcb4bae74c60af8c927e78f5141a813c75d8f766ecd564364ce92ba791","size_bytes":238488177}]},"_links":{"artifacts":{"href":"/v1/images/id/5cc9ca3fdd19c7782937e02c/artifacts"},"requests":{"href":"/v1/images/id/5cc9ca3fdd19c7782937e02c/requests"},"rpm_manifest":{"href":"/v1/images/id/5cc9ca3fdd19c7782937e02c/rpm-manifest"},"test_results":{"href":"/v1/images/id/5cc9ca3fdd19c7782937e02c/test-results"},"vulnerabilities":{"href":"/v1/images/id/5cc9ca3fdd19c7782937e02c/vulnerabilities"}}},{"_id":"5cc9ca42dd19c7782937e032","architecture":"ppc64le","creation_date":"2019-05-01T16:33:06.150000+00:00","image_id":"sha256:560636f0e8ad995cc284c8ef63be38730db36f26f744af31b210cc68d48c8d7e","last_update_date":"2024-09-06T10:10:03.457000+00:00","object_type":"containerImage","parsed_data":{"architecture":"ppc64le","created":"2019-04-25T16:23:38.052788Z","layers":["sha256:e7548d1dc2dd34d444691eb2d667876ae24c4f4f83a86dbd9e05fca34f9db05b","sha256:3df8f8b02970dc739003bbac3f7c9c2cc514eb6bc6a2af28e6f8b23a487fbfd6"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:5b396ed7b96ed87e2aa919a5ab622810e0d2c171a85c607d2e4a18a2323b5d2e","size_bytes":3519},{"layer_id":"sha256:4f4d77ef659ad7e98164b181cb858f98673f3346dd2eebc2eb784416563c50a4","size_bytes":268395724}]},"_links":{"artifacts":{"href":"/v1/images/id/5cc9ca42dd19c7782937e032/artifacts"},"requests":{"href":"/v1/images/id/5cc9ca42dd19c7782937e032/requests"},"rpm_manifest":{"href":"/v1/images/id/5cc9ca42dd19c7782937e032/rpm-manifest"},"test_results":{"href":"/v1/images/id/5cc9ca42dd19c7782937e032/test-results"},"vulnerabilities":{"href":"/v1/images/id/5cc9ca42dd19c7782937e032/vulnerabilities"}}},{"_id":"5cc9ca44dd19c7782937e03e","architecture":"s390x","creation_date":"2019-05-01T16:33:08.330000+00:00","image_id":"sha256:3f0f9d8b4c133eee9495211bb0ca431a14cdb32ee9ec1c3cba5ff02562960281","last_update_date":"2024-09-06T10:10:05.724000+00:00","object_type":"containerImage","parsed_data":{"architecture":"s390x","created":"2019-04-25T16:26:43.019235Z","layers":["sha256:45299504ade1327fddcbe5e18bd22d915409c22f2b1e4960aec2713dc378b2da","sha256:396ddd18963a1c43260127403ba8e9e20e03b37adb69627f541df3b607e658f6"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:531155794457a67ef0aad9842794f333a195087479c81c518da15209f71e3e10","size_bytes":3512},{"layer_id":"sha256:a2bc6bab696889ea2e45ea04e7ac710dee8b6b37d3a480fe6e91fc878320bcb6","size_bytes":202500358}]},"_links":{"artifacts":{"href":"/v1/images/id/5cc9ca44dd19c7782937e03e/artifacts"},"requests":{"href":"/v1/images/id/5cc9ca44dd19c7782937e03e/requests"},"rpm_manifest":{"href":"/v1/images/id/5cc9ca44dd19c7782937e03e/rpm-manifest"},"test_results":{"href":"/v1/images/id/5cc9ca44dd19c7782937e03e/test-results"},"vulnerabilities":{"href":"/v1/images/id/5cc9ca44dd19c7782937e03e/vulnerabilities"}}},{"_id":"5d099880d70cc57c44bef91f","architecture":"amd64","creation_date":"2019-06-19T02:05:52.216000+00:00","image_id":"sha256:284eedc1810e91ec2778d5baa848939b8fcaa3414ddb9c09def6b413561602b2","last_update_date":"2024-09-06T10:10:07.778000+00:00","object_type":"containerImage","parsed_data":{"architecture":"amd64","created":"2019-06-11T09:38:21.230674Z","layers":["sha256:7e0f5f7bc63fab93173f321e9ab56ffb184a36b2793f82aa9bca46a145bf9a95","sha256:89f1c7157a2d8d40f6bf7346d0db6d49dda64fd84a549895b307ae0ed72936a9"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:77ba31c86fd4def6e9925f74c62ce954d6fca2164bc00ff3619c2e5d276eb3bb","size_bytes":3548},{"layer_id":"sha256:4144b1ae544bd17e45e4980a9e00c13eee6e9792e43ee9896035993b9b2f28d5","size_bytes":207554295}]},"_links":{"artifacts":{"href":"/v1/images/id/5d099880d70cc57c44bef91f/artifacts"},"requests":{"href":"/v1/images/id/5d099880d70cc57c44bef91f/requests"},"rpm_manifest":{"href":"/v1/images/id/5d099880d70cc57c44bef91f/rpm-manifest"},"test_results":{"href":"/v1/images/id/5d099880d70cc57c44bef91f/test-results"},"vulnerabilities":{"href":"/v1/images/id/5d099880d70cc57c44bef91f/vulnerabilities"}}},{"_id":"5d099881d70cc57c44bef925","architecture":"arm64","creation_date":"2019-06-19T02:05:53.999000+00:00","image_id":"sha256:5f4c2d256ebf1f650481c7b5e2c9de0a619ddae1a6bda40519f77cc0bc5ca52c","last_update_date":"2024-09-06T10:10:19.353000+00:00","object_type":"containerImage","parsed_data":{"architecture":"arm64","created":"2019-06-11T09:38:56.943958Z","layers":["sha256:100a628bc0f6218e09156e27f602534d3f9dd852fa38861c098d3f9ab7fcf1af","sha256:7074ebd1d24a01f9985a982a0d383ceb2ce1d5eee19976d9b6aa93e2387c84c9"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:9a9cf5226a6ea9a61763bae92f6e92953ca92f61012e1e9618624207614e0306","size_bytes":3547},{"layer_id":"sha256:bd232ebc8cc7a3a7fe2f750dd14f8f05ab06e140091d4a88184f422005022c73","size_bytes":238483337}]},"_links":{"artifacts":{"href":"/v1/images/id/5d099881d70cc57c44bef925/artifacts"},"requests":{"href":"/v1/images/id/5d099881d70cc57c44bef925/requests"},"rpm_manifest":{"href":"/v1/images/id/5d099881d70cc57c44bef925/rpm-manifest"},"test_results":{"href":"/v1/images/id/5d099881d70cc57c44bef925/test-results"},"vulnerabilities":{"href":"/v1/images/id/5d099881d70cc57c44bef925/vulnerabilities"}}}],"page":0,"page_size":6,"total":368} +-- catalog.redhat.com/api/containers/v1/images/id/5cc9ca3ddd19c7782937e026/rpm-manifest -- +{"_id":"5cc9ca3edd19c7782937e02a","creation_date":"2019-05-01T16:33:02.778000+00:00","image_id":"5cc9ca3ddd19c7782937e026","last_update_date":"2024-09-06T10:09:56.886000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.1.1-4.el8.x86_64","release":"4.el8","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.1.1-4.el8.src","summary":"Extended crypt library for DES, MD5, Blowfish and others","version":"4.1.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.1-6.el8.x86_64","release":"6.el8","srpm_name":"grep","srpm_nevra":"grep-0:3.1-6.el8.src","summary":"Pattern matching utilities","version":"3.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.3.4-10.el8.x86_64","release":"10.el8","srpm_name":"lua","srpm_nevra":"lua-0:5.3.4-10.el8.src","summary":"Libraries for lua","version":"5.3.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-10.el8.x86_64","release":"10.el8","srpm_name":"which","srpm_nevra":"which-0:2.21-10.el8.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.9-4.el8.x86_64","release":"4.el8","srpm_name":"gzip","srpm_nevra":"gzip-0:1.9-4.el8.src","summary":"The GNU data compression program","version":"1.9"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.6-26.el8.x86_64","release":"26.el8","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.6-26.el8.src","summary":"Libraries for applications using bzip2","version":"1.0.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.5-1.el8.x86_64","release":"1.el8","srpm_name":"sed","srpm_nevra":"sed-0:4.5-1.el8.src","summary":"A GNU stream text editor","version":"4.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.30-4.el8.x86_64","release":"4.el8","srpm_name":"tar","srpm_nevra":"tar-2:1.30-4.el8.src","summary":"A GNU file archiving program","version":"1.30"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-4.2.1-1.el8.x86_64","release":"1.el8","srpm_name":"gawk","srpm_nevra":"gawk-0:4.2.1-1.el8.src","summary":"The GNU version of the AWK text processing utility","version":"4.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-5.el8.noarch","release":"5.el8","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-5.el8.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.2.53-1.el8.x86_64","release":"1.el8","srpm_name":"acl","srpm_nevra":"acl-0:2.2.53-1.el8.src","summary":"Dynamic library for access control list support","version":"2.2.53"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.2.53-1.el8.x86_64","release":"1.el8","srpm_name":"acl","srpm_nevra":"acl-0:2.2.53-1.el8.src","summary":"Access control list utilities","version":"2.2.53"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.4.48-3.el8.x86_64","release":"3.el8","srpm_name":"attr","srpm_nevra":"attr-0:2.4.48-3.el8.src","summary":"Dynamic library for extended attribute support","version":"2.4.48"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-0.3rc7.el8.x86_64","release":"0.3rc7.el8","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-0.3rc7.el8.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus-glib","nvra":"dbus-glib-0.110-2.el8.x86_64","release":"2.el8","srpm_name":"dbus-glib","srpm_nevra":"dbus-glib-0:0.110-2.el8.src","summary":"GLib bindings for D-Bus","version":"0.110"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.4-14.el8.x86_64","release":"14.el8","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.4-14.el8.src","summary":"D-Bus bindings for python3","version":"1.2.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.8-2.el8.x86_64","release":"2.el8","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.8-2.el8.src","summary":"The basic directory layout for a Linux system","version":"3.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.5-3.el8.x86_64","release":"3.el8","srpm_name":"expat","srpm_nevra":"expat-0:2.2.5-3.el8.src","summary":"An XML parser library","version":"2.2.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.7-5.el8.x86_64","release":"5.el8","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.7-5.el8.src","summary":"Library providing XML and HTML support","version":"2.9.7"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libxml2","nvra":"python3-libxml2-2.9.7-5.el8.x86_64","release":"5.el8","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.7-5.el8.src","summary":"Python 3 bindings for the libxml2 library","version":"2.9.7"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.1.2-8.el8.x86_64","release":"8.el8","srpm_name":"gmp","srpm_nevra":"gmp-1:6.1.2-8.el8.src","summary":"A GNU arbitrary precision library","version":"6.1.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.2.1-2.el8.noarch","release":"2.el8","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.2.1-2.el8.src","summary":"Module to simplify usage of decorators in python3","version":"4.2.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.56.1-1.el8.x86_64","release":"1.el8","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.56.1-1.el8.src","summary":"Introspection system for GObject-based libraries","version":"1.56.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-1.0-12.el8.noarch","release":"12.el8","srpm_name":"langpacks","srpm_nevra":"langpacks-0:1.0-12.el8.src","summary":"English langpacks meta-package","version":"1.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.6.1-6.el8.noarch","release":"6.el8","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.6.1-6.el8.src","summary":"Powerful extensions to the standard datetime module","version":"2.6.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.2.9-1.el8.x86_64","release":"1.el8","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.2.9-1.el8.src","summary":"Utility for secure communication and data storage","version":"2.2.9"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-31.el8.noarch","release":"31.el8","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-31.el8.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.13.1-0.2.el8.x86_64","release":"0.2.el8","srpm_name":"json-c","srpm_nevra":"json-c-0:0.13.1-0.2.el8.src","summary":"JSON implementation in C","version":"0.13.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.5.10-6.el8.x86_64","release":"6.el8","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.5.10-6.el8.src","summary":"Key utilities library","version":"1.5.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.1-3.el8.x86_64","release":"3.el8","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.1-3.el8.src","summary":"GnuPG IPC library","version":"2.5.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.25-9.el8.x86_64","release":"9.el8","srpm_name":"libcap","srpm_nevra":"libcap-0:2.25-9.el8.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.25"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.31-1.el8.x86_64","release":"1.el8","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.31-1.el8.src","summary":"Library for error values used by GnuPG components","version":"1.31"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.8.3-2.el8.x86_64","release":"2.el8","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.8.3-2.el8.src","summary":"A general-purpose cryptography library","version":"1.8.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.0.5-1.el8.x86_64","release":"1.el8","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.0.5-1.el8.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.0.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libmetalink","nvra":"libmetalink-0.1.3-7.el8.x86_64","release":"7.el8","srpm_name":"libmetalink","srpm_nevra":"libmetalink-0:0.1.3-7.el8.src","summary":"Metalink library written in C","version":"0.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.3.5-7.el8.x86_64","release":"7.el8","srpm_name":"libksba","srpm_nevra":"libksba-0:1.3.5-7.el8.src","summary":"CMS and X.509 library","version":"1.3.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.3.2-3.el8.x86_64","release":"3.el8","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.3.2-3.el8.src","summary":"A library for handling streaming archive formats","version":"3.3.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libnsl2","nvra":"libnsl2-1.2.0-2.20180605git4a062cf.el8.x86_64","release":"2.20180605git4a062cf.el8","srpm_name":"libnsl2","srpm_nevra":"libnsl2-0:1.2.0-2.20180605git4a062cf.el8.src","summary":"Public client interface library for NIS(YP) and NIS+","version":"1.2.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.4.0-4.el8.x86_64","release":"4.el8","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.4.0-4.el8.src","summary":"Convenience library for kernel netlink sockets","version":"3.4.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libpsl","nvra":"libpsl-0.20.2-5.el8.x86_64","release":"5.el8","srpm_name":"libpsl","srpm_nevra":"libpsl-0:0.20.2-5.el8.src","summary":"C library for the Publix Suffix List","version":"0.20.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libpcap","nvra":"libpcap-1.9.0-1.el8.x86_64","release":"1.el8","srpm_name":"libpcap","srpm_nevra":"libpcap-14:1.9.0-1.el8.src","summary":"A system-independent interface for user-level packet capture","version":"1.9.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.11-5.el8.x86_64","release":"5.el8","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.11-5.el8.src","summary":"Library for handling page faults in user mode","version":"2.11"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.3.3-3.el8.x86_64","release":"3.el8","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.3.3-3.el8.src","summary":"Enhanced seccomp library","version":"2.3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.13-3.el8.x86_64","release":"3.el8","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.13-3.el8.src","summary":"The ASN.1 library used in GNUTLS","version":"4.13"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.1.6-14.el8.x86_64","release":"14.el8","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.1.6-14.el8.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.1.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.0-5.el8.x86_64","release":"5.el8","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.0-5.el8.src","summary":"Main loop abstraction library","version":"0.3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.11.0-8.el8.noarch","release":"8.el8","srpm_name":"python-six","srpm_nevra":"python-six-0:1.11.0-8.el8.src","summary":"Python 2 and 3 compatibility utilities","version":"1.11.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.1.7-5.el8.x86_64","release":"5.el8","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.1.7-5.el8.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.1.7"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.8.1.2-4.el8.x86_64","release":"4.el8","srpm_name":"lz4","srpm_nevra":"lz4-0:1.8.1.2-4.el8.src","summary":"Libaries for lz4","version":"1.8.1.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-3.1.6-1.el8.x86_64","release":"1.el8","srpm_name":"mpfr","srpm_nevra":"mpfr-0:3.1.6-1.el8.src","summary":"A C library for multiple-precision floating-point computations","version":"3.1.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.5-4.el8.x86_64","release":"4.el8","srpm_name":"npth","srpm_nevra":"npth-0:1.5-4.el8.src","summary":"The New GNU Portable Threads library","version":"1.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"publicsuffix-list-dafsa","nvra":"publicsuffix-list-dafsa-20180723-1.el8.noarch","release":"1.el8","srpm_name":"publicsuffix-list","srpm_nevra":"publicsuffix-list-0:20180723-1.el8.src","summary":"Cross-vendor public domain suffix database in DAFSA form","version":"20180723"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-2.el8.x86_64","release":"2.el8","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-2.el8.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-10.el8.x86_64","release":"10.el8","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-10.el8.src","summary":"The compression and decompression library","version":"1.2.11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pkgconf-m4","nvra":"pkgconf-m4-1.4.2-1.el8.noarch","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"m4 macros for pkgconf","version":"1.4.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pkgconf-pkg-config","nvra":"pkgconf-pkg-config-1.4.2-1.el8.x86_64","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"pkgconf shim to provide /usr/bin/pkg-config","version":"1.4.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pkgconf","nvra":"pkgconf-1.4.2-1.el8.x86_64","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"Package compiler and linker metadata toolkit","version":"1.4.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libpkgconf","nvra":"libpkgconf-1.4.2-1.el8.x86_64","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"Backend library for pkgconf","version":"1.4.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.16-14.el8.x86_64","release":"14.el8","srpm_name":"popt","srpm_nevra":"popt-0:1.16-14.el8.src","summary":"C library for parsing command line parameters","version":"1.16"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.28.3-1.el8.x86_64","release":"1.el8","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.28.3-1.el8.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.28.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-7.0-10.el8.x86_64","release":"10.el8","srpm_name":"readline","srpm_nevra":"readline-0:7.0-10.el8.src","summary":"A library for editing typed command lines","version":"7.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2018.2.24-6.el8.noarch","release":"6.el8","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2018.2.24-6.el8.src","summary":"The Mozilla CA root certificate bundle","version":"2018.2.24"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.9-3.el8.x86_64","release":"3.el8","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.9-3.el8.src","summary":"GNU Unicode string library","version":"0.9.9"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libusbx","nvra":"libusbx-1.0.22-1.el8.x86_64","release":"1.el8","srpm_name":"libusbx","srpm_nevra":"libusbx-0:1.0.22-1.el8.src","summary":"Library for accessing USB devices","version":"1.0.22"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.9.5-6.el8.x86_64","release":"6.el8","srpm_name":"libreport","srpm_nevra":"libreport-0:2.9.5-6.el8.src","summary":"Filesystem layout for libreport","version":"2.9.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.42-4.el8.x86_64","release":"4.el8","srpm_name":"pcre","srpm_nevra":"pcre-0:8.42-4.el8.src","summary":"Perl-compatible regular expression library","version":"8.42"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.12.2-1.el8.noarch","release":"1.el8","srpm_name":"setup","srpm_nevra":"setup-0:2.12.2-1.el8.src","summary":"A set of system configuration and setup files","version":"2.12.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"chkconfig","nvra":"chkconfig-1.11-1.el8.x86_64","release":"1.el8","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.11-1.el8.src","summary":"A system tool for maintaining the /etc/rc*.d hierarchy","version":"1.11"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-dmidecode","nvra":"python3-dmidecode-3.12.2-13.el8.x86_64","release":"13.el8","srpm_name":"python-dmidecode","srpm_nevra":"python-dmidecode-0:3.12.2-13.el8.src","summary":"Python 3 module to access DMI data","version":"3.12.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dmidecode","nvra":"dmidecode-3.2-1.el8.x86_64","release":"1.el8","srpm_name":"dmidecode","srpm_nevra":"dmidecode-1:3.2-1.el8.src","summary":"Tool to analyse BIOS DMI data","version":"3.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.9.2-1.el8.x86_64","release":"1.el8","srpm_name":"librepo","srpm_nevra":"librepo-0:1.9.2-1.el8.src","summary":"Python 3 bindings for the librepo library","version":"1.9.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.9.2-1.el8.x86_64","release":"1.el8","srpm_name":"librepo","srpm_nevra":"librepo-0:1.9.2-1.el8.src","summary":"Repodata downloading library","version":"1.9.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.18-1.el8.x86_64","release":"1.el8","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.18-1.el8.src","summary":"Libraries files for gdbm","version":"1.18"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gdbm","nvra":"gdbm-1.18-1.el8.x86_64","release":"1.el8","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.18-1.el8.src","summary":"A GNU set of database routines which use extensible hashing","version":"1.18"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libtirpc","nvra":"libtirpc-1.1.4-3.el8.x86_64","release":"3.el8","srpm_name":"libtirpc","srpm_nevra":"libtirpc-0:1.1.4-3.el8.src","summary":"Transport Independent RPC Library","version":"1.1.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"info","nvra":"info-6.5-4.el8.x86_64","release":"4.el8","srpm_name":"texinfo","srpm_nevra":"texinfo-0:6.5-4.el8.src","summary":"A stand-alone TTY-based reader for GNU texinfo documentation","version":"6.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.33.0-1.el8.x86_64","release":"1.el8","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.33.0-1.el8.src","summary":"A library implementing the HTTP/2 protocol","version":"1.33.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"brotli","nvra":"brotli-1.0.6-1.el8.x86_64","release":"1.el8","srpm_name":"brotli","srpm_nevra":"brotli-0:1.0.6-1.el8.src","summary":"Lossless compression algorithm","version":"1.0.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.4.4-1.el8.x86_64","release":"1.el8","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.4.4-1.el8.src","summary":"Library for JavaScript Object Notation format","version":"1.4.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.0-9.el8.x86_64","release":"9.el8","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.0-9.el8.src","summary":"A library for password generation and password quality checking","version":"1.4.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.8-7.el8.noarch","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus configuration","version":"1.12.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus-daemon","nvra":"dbus-daemon-1.12.8-7.el8.x86_64","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus","version":"1.12.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.8-7.el8.x86_64","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"Libraries for accessing D-BUS","version":"1.12.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus-tools","nvra":"dbus-tools-1.12.8-7.el8.x86_64","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS Tools and Utilities","version":"1.12.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.8-7.el8.x86_64","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus","version":"1.12.8"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"platform-python-setuptools","nvra":"platform-python-setuptools-39.2.0-4.el8.noarch","release":"4.el8","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:39.2.0-4.el8.src","summary":"Easily build and distribute Python 3 packages","version":"39.2.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.1-4.el8.x86_64","release":"4.el8","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.1-4.el8.src","summary":"IMA/EVM support utilities","version":"1.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.18-6.el8.x86_64","release":"6.el8","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.18-6.el8.src","summary":"Detect if we are running in a virtual machine","version":"1.18"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.6.0-20.el8.x86_64","release":"20.el8","srpm_name":"findutils","srpm_nevra":"findutils-1:4.6.0-20.el8.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.6.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.33-8.el8.x86_64","release":"8.el8","srpm_name":"file","srpm_nevra":"file-0:5.33-8.el8.src","summary":"Libraries for applications using libmagic","version":"5.33"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-2.8-2.el8.x86_64","release":"2.el8","srpm_name":"libsepol","srpm_nevra":"libsepol-0:2.8-2.el8.src","summary":"SELinux binary policy manipulation library","version":"2.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-2.8-6.el8.x86_64","release":"6.el8","srpm_name":"libselinux","srpm_nevra":"libselinux-0:2.8-6.el8.src","summary":"SELinux library and simple utilities","version":"2.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-2.el8.x86_64","release":"2.el8","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-2.el8.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-13.el8.noarch","release":"13.el8","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-13.el8.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.113-1.el8.x86_64","release":"1.el8","srpm_name":"usermode","srpm_nevra":"usermode-0:1.113-1.el8.src","summary":"Tools for certain user account management tasks","version":"1.113"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.10.0-6.el8.x86_64","release":"6.el8","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.10.0-6.el8.src","summary":"gpgme bindings for Python 3","version":"1.10.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.10.0-6.el8.x86_64","release":"6.el8","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.10.0-6.el8.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.10.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.4-3.el8.x86_64","release":"3.el8","srpm_name":"xz","srpm_nevra":"xz-0:5.2.4-3.el8.src","summary":"Libraries for decoding LZMA compression","version":"5.2.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-15.el8.x86_64","release":"15.el8","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-15.el8.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.1-18.el8.x86_64","release":"18.el8","srpm_name":"libffi","srpm_nevra":"libffi-0:3.1-18.el8.src","summary":"A portable foreign function interface library","version":"3.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.62-21.el8.x86_64","release":"21.el8","srpm_name":"libuser","srpm_nevra":"libuser-0:0.62-21.el8.src","summary":"A user and group account administration library","version":"0.62"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.0.6-1.el8.x86_64","release":"1.el8","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.0.6-1.el8.src","summary":"Cryptsetup shared library","version":"2.0.6"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.174-6.el8.noarch","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Default yama attach scope sysctl setting","version":"0.174"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.174-6.el8.x86_64","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Library to read and write ELF files","version":"0.174"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.174-6.el8.x86_64","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Libraries to handle compiled objects","version":"0.174"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.0.1763-10.el8.x86_64","release":"10.el8","srpm_name":"vim","srpm_nevra":"vim-2:8.0.1763-10.el8.src","summary":"A minimal version of the VIM editor","version":"8.0.1763"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-2.8-5.el8.x86_64","release":"5.el8","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:2.8-5.el8.src","summary":"SELinux binary policy manipulation library","version":"2.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.3.1-4.el8.x86_64","release":"4.el8","srpm_name":"pam","srpm_nevra":"pam-0:1.3.1-4.el8.src","summary":"An extensible library which provides authentication for applications","version":"1.3.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.14-3.el8.x86_64","release":"3.el8","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.14-3.el8.src","summary":"Python module to interface with ethtool","version":"0.14"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-8.2.1-3.5.el8.x86_64","release":"3.5.el8","srpm_name":"gcc","srpm_nevra":"gcc-0:8.2.1-3.5.el8.src","summary":"GNU Standard C++ Library","version":"8.2.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-8.2.1-3.5.el8.x86_64","release":"3.5.el8","srpm_name":"gcc","srpm_nevra":"gcc-0:8.2.1-3.5.el8.src","summary":"GCC version 8 shared support library","version":"8.2.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.32.1-8.el8.x86_64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Partitioning library for fdisk-like programs.","version":"2.32.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.32.1-8.el8.x86_64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"A collection of basic system utilities","version":"2.32.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.32.1-8.el8.x86_64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Universally unique ID library","version":"2.32.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.32.1-8.el8.x86_64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Device mounting library","version":"2.32.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.32.1-8.el8.x86_64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Block device ID library","version":"2.32.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.32.1-8.el8.x86_64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Formatting library for ls-like programs.","version":"2.32.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.4.1-1.el8.x86_64","release":"1.el8","srpm_name":"nettle","srpm_nevra":"nettle-0:3.4.1-1.el8.src","summary":"A low-level cryptographic library","version":"3.4.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.8-13.el8.x86_64","release":"13.el8","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.8-13.el8.src","summary":"Comps XML file manipulation library","version":"0.1.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.8-13.el8.x86_64","release":"13.el8","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.8-13.el8.src","summary":"Python 3 bindings for libcomps library","version":"0.1.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-1.1.1-8.el8.x86_64","release":"8.el8","srpm_name":"openssl","srpm_nevra":"openssl-1:1.1.1-8.el8.src","summary":"A general purpose cryptography library with TLS implementation","version":"1.1.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.32-1.el8.x86_64","release":"1.el8","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.32-1.el8.src","summary":"Perl-compatible regular expression library","version":"10.32"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libssh","nvra":"libssh-0.8.5-2.el8.x86_64","release":"2.el8","srpm_name":"libssh","srpm_nevra":"libssh-0:0.8.5-2.el8.src","summary":"A library implementing the SSH protocol","version":"0.8.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"platform-python-pip","nvra":"platform-python-pip-9.0.3-13.el8.noarch","release":"13.el8","srpm_name":"python-pip","srpm_nevra":"python-pip-0:9.0.3-13.el8.src","summary":"A tool for installing and managing Python3 packages","version":"9.0.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.44.3-2.el8.x86_64","release":"2.el8","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.44.3-2.el8.src","summary":"Common error description library","version":"1.44.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.46-9.el8.x86_64","release":"9.el8","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.46-9.el8.src","summary":"LDAP support libraries","version":"2.4.46"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.6-7.el8.x86_64","release":"7.el8","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.6-7.el8.src","summary":"Utilities for managing accounts and shadow password files","version":"4.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.14.2-9.el8.x86_64","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Libraries for building and signing RPM packages","version":"4.14.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.14.2-9.el8.x86_64","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.14.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.14.2-9.el8.x86_64","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"The RPM package management system","version":"4.14.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.14.2-9.el8.x86_64","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Libraries for manipulating RPM packages","version":"4.14.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.26.0-3.el8.x86_64","release":"3.el8","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.26.0-3.el8.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.26.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.2.2-3.el8.noarch","release":"3.el8","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.2.2-3.el8.src","summary":"Core Plugins for DNF","version":"4.0.2.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.7.9-4.el8.x86_64","release":"4.el8","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.7.9-4.el8.src","summary":"An alternate posix capabilities library","version":"0.7.9"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0-0.10.20180831git0047a6c.el8.x86_64","release":"0.10.20180831git0047a6c.el8","srpm_name":"audit","srpm_nevra":"audit-0:3.0-0.10.20180831git0047a6c.el8.src","summary":"Dynamic library for libaudit","version":"3.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcurl","nvra":"libcurl-7.61.1-8.el8.x86_64","release":"8.el8","srpm_name":"curl","srpm_nevra":"curl-0:7.61.1-8.el8.src","summary":"A library for getting files from web servers","version":"7.61.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"curl","nvra":"curl-7.61.1-8.el8.x86_64","release":"8.el8","srpm_name":"curl","srpm_nevra":"curl-0:7.61.1-8.el8.src","summary":"A utility for getting files from remote servers (FTP, HTTP, and others)","version":"7.61.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.6.5-2.el8.x86_64","release":"2.el8","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.6.5-2.el8.src","summary":"A TLS protocol implementation","version":"3.6.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.30-6.el8.x86_64","release":"6.el8","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.30-6.el8.src","summary":"coreutils multicall binary","version":"8.30"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-8.2-5.el8.x86_64","release":"5.el8","srpm_name":"gdb","srpm_nevra":"gdb-0:8.2-5.el8.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"8.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-4.4.19-7.el8.x86_64","release":"7.el8","srpm_name":"bash","srpm_nevra":"bash-0:4.4.19-7.el8.src","summary":"The GNU Bourne Again shell","version":"4.4.19"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.56.4-1.el8.x86_64","release":"1.el8","srpm_name":"glib2","srpm_nevra":"glib2-0:2.56.4-1.el8.src","summary":"A library of handy utility functions","version":"2.56.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.1-7.20180224.el8.noarch","release":"7.20180224.el8","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.1-7.20180224.el8.src","summary":"Descriptions of common terminals","version":"6.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.1-7.20180224.el8.x86_64","release":"7.20180224.el8","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.1-7.20180224.el8.src","summary":"Ncurses libraries","version":"6.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libmodulemd1","nvra":"libmodulemd1-1.8.0-5.el8.x86_64","release":"5.el8","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.0.0-5.el8.src","summary":"Compatibility package for libmodulemd 1.x","version":"1.8.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-36.el8.x86_64","release":"36.el8","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-36.el8.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libdb-utils","nvra":"libdb-utils-5.3.28-36.el8.x86_64","release":"36.el8","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-36.el8.src","summary":"Command line tools for managing Berkeley DB databases","version":"5.3.28"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.16.1-22.el8.x86_64","release":"22.el8","srpm_name":"krb5","srpm_nevra":"krb5-0:1.16.1-22.el8.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.16.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.6.35-6.el8.x86_64","release":"6.el8","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.6.35-6.el8.src","summary":"Package dependency solver","version":"0.6.35"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"iptables-libs","nvra":"iptables-libs-1.8.2-9.el8.x86_64","release":"9.el8","srpm_name":"iptables","srpm_nevra":"iptables-0:1.8.2-9.el8.src","summary":"iptables libraries","version":"1.8.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Package manager","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Common data and configuration files for DNF","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Python 3 interface to DNF","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Package manager","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20181217-6.git9a35207.el8.noarch","release":"6.git9a35207.el8","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20181217-6.git9a35207.el8.src","summary":"Systemwide crypto policies","version":"20181217"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.155-6.el8.x86_64","release":"6.el8","srpm_name":"lvm2","srpm_nevra":"lvm2-8:2.03.02-6.el8.src","summary":"Device-mapper shared library","version":"1.02.155"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.155-6.el8.x86_64","release":"6.el8","srpm_name":"lvm2","srpm_nevra":"lvm2-8:2.03.02-6.el8.src","summary":"Device mapper utility","version":"1.02.155"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-8.0-0.44.el8.x86_64","release":"0.44.el8","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:8.0-0.44.el8.src","summary":"Red Hat Enterprise Linux release file","version":"8.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.23.8-35.el8.x86_64","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.23.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-syspurpose","nvra":"python3-syspurpose-1.23.8-35.el8.x86_64","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"A commandline utility for declaring system syspurpose","version":"1.23.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.23.8-35.el8.x86_64","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Tools and libraries for subscription and repository management","version":"1.23.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dnf-plugin-subscription-manager","nvra":"dnf-plugin-subscription-manager-1.23.8-35.el8.x86_64","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Subscription Manager plugins for DNF","version":"1.23.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.23.8-35.el8.x86_64","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.23.8"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2019a-1.el8.noarch","release":"1.el8","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2019a-1.el8.src","summary":"Timezone data","version":"2019a"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.23.14-5.el8_0.x86_64","release":"5.el8_0","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.23.14-5.el8_0.src","summary":"System trust module from p11-kit","version":"0.23.14"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.23.14-5.el8_0.x86_64","release":"5.el8_0","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.23.14-5.el8_0.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.23.14"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.28-42.el8_0.1.x86_64","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"Minimal language packs for glibc.","version":"2.28"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.28-42.el8_0.1.x86_64","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"Common binaries and locale data for glibc","version":"2.28"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.28-42.el8_0.1.x86_64","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"The GNU libc libraries","version":"2.28"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.22.5-5.el8_0.x86_64","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.22.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.22.5-5.el8_0.x86_64","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.22.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.22.5-5.el8_0.x86_64","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.22.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-25-11.el8_0.2.x86_64","release":"11.el8_0.2","srpm_name":"kmod","srpm_nevra":"kmod-0:25-11.el8_0.2.src","summary":"Libraries to handle kernel module loading and unloading","version":"25"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"platform-python","nvra":"platform-python-3.6.8-2.el8_0.x86_64","release":"2.el8_0","srpm_name":"python3","srpm_nevra":"python3-0:3.6.8-2.el8_0.src","summary":"Internal interpreter of the Python programming language","version":"3.6.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.6.8-2.el8_0.x86_64","release":"2.el8_0","srpm_name":"python3","srpm_nevra":"python3-0:3.6.8-2.el8_0.src","summary":"Python runtime libraries","version":"3.6.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-239-13.el8_0.3.x86_64","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"System and Service Manager","version":"239"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-239-13.el8_0.3.x86_64","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"systemd PAM module","version":"239"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-239-13.el8_0.3.x86_64","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"systemd libraries","version":"239"}],"_links":{"image":{"href":"/v1/images/id/5cc9ca3ddd19c7782937e026"}}} +-- catalog.redhat.com/api/containers/v1/images/id/5cc9ca3fdd19c7782937e02c/rpm-manifest -- +{"_id":"5cc9ca41dd19c7782937e030","creation_date":"2019-05-01T16:33:05.234000+00:00","image_id":"5cc9ca3fdd19c7782937e02c","last_update_date":"2024-09-06T10:10:02.345000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.1.1-4.el8.aarch64","release":"4.el8","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.1.1-4.el8.src","summary":"Extended crypt library for DES, MD5, Blowfish and others","version":"4.1.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.1-6.el8.aarch64","release":"6.el8","srpm_name":"grep","srpm_nevra":"grep-0:3.1-6.el8.src","summary":"Pattern matching utilities","version":"3.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.3.4-10.el8.aarch64","release":"10.el8","srpm_name":"lua","srpm_nevra":"lua-0:5.3.4-10.el8.src","summary":"Libraries for lua","version":"5.3.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-10.el8.aarch64","release":"10.el8","srpm_name":"which","srpm_nevra":"which-0:2.21-10.el8.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.9-4.el8.aarch64","release":"4.el8","srpm_name":"gzip","srpm_nevra":"gzip-0:1.9-4.el8.src","summary":"The GNU data compression program","version":"1.9"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.6-26.el8.aarch64","release":"26.el8","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.6-26.el8.src","summary":"Libraries for applications using bzip2","version":"1.0.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.5-1.el8.aarch64","release":"1.el8","srpm_name":"sed","srpm_nevra":"sed-0:4.5-1.el8.src","summary":"A GNU stream text editor","version":"4.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.30-4.el8.aarch64","release":"4.el8","srpm_name":"tar","srpm_nevra":"tar-2:1.30-4.el8.src","summary":"A GNU file archiving program","version":"1.30"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-4.2.1-1.el8.aarch64","release":"1.el8","srpm_name":"gawk","srpm_nevra":"gawk-0:4.2.1-1.el8.src","summary":"The GNU version of the AWK text processing utility","version":"4.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-5.el8.noarch","release":"5.el8","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-5.el8.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.2.53-1.el8.aarch64","release":"1.el8","srpm_name":"acl","srpm_nevra":"acl-0:2.2.53-1.el8.src","summary":"Access control list utilities","version":"2.2.53"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.2.53-1.el8.aarch64","release":"1.el8","srpm_name":"acl","srpm_nevra":"acl-0:2.2.53-1.el8.src","summary":"Dynamic library for access control list support","version":"2.2.53"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.4.48-3.el8.aarch64","release":"3.el8","srpm_name":"attr","srpm_nevra":"attr-0:2.4.48-3.el8.src","summary":"Dynamic library for extended attribute support","version":"2.4.48"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-0.3rc7.el8.aarch64","release":"0.3rc7.el8","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-0.3rc7.el8.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus-glib","nvra":"dbus-glib-0.110-2.el8.aarch64","release":"2.el8","srpm_name":"dbus-glib","srpm_nevra":"dbus-glib-0:0.110-2.el8.src","summary":"GLib bindings for D-Bus","version":"0.110"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.4-14.el8.aarch64","release":"14.el8","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.4-14.el8.src","summary":"D-Bus bindings for python3","version":"1.2.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.8-2.el8.aarch64","release":"2.el8","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.8-2.el8.src","summary":"The basic directory layout for a Linux system","version":"3.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.5-3.el8.aarch64","release":"3.el8","srpm_name":"expat","srpm_nevra":"expat-0:2.2.5-3.el8.src","summary":"An XML parser library","version":"2.2.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.7-5.el8.aarch64","release":"5.el8","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.7-5.el8.src","summary":"Library providing XML and HTML support","version":"2.9.7"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.1.2-8.el8.aarch64","release":"8.el8","srpm_name":"gmp","srpm_nevra":"gmp-1:6.1.2-8.el8.src","summary":"A GNU arbitrary precision library","version":"6.1.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.2.1-2.el8.noarch","release":"2.el8","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.2.1-2.el8.src","summary":"Module to simplify usage of decorators in python3","version":"4.2.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.56.1-1.el8.aarch64","release":"1.el8","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.56.1-1.el8.src","summary":"Introspection system for GObject-based libraries","version":"1.56.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-1.0-12.el8.noarch","release":"12.el8","srpm_name":"langpacks","srpm_nevra":"langpacks-0:1.0-12.el8.src","summary":"English langpacks meta-package","version":"1.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.6.1-6.el8.noarch","release":"6.el8","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.6.1-6.el8.src","summary":"Powerful extensions to the standard datetime module","version":"2.6.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.2.9-1.el8.aarch64","release":"1.el8","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.2.9-1.el8.src","summary":"Utility for secure communication and data storage","version":"2.2.9"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-31.el8.noarch","release":"31.el8","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-31.el8.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.13.1-0.2.el8.aarch64","release":"0.2.el8","srpm_name":"json-c","srpm_nevra":"json-c-0:0.13.1-0.2.el8.src","summary":"JSON implementation in C","version":"0.13.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.5.10-6.el8.aarch64","release":"6.el8","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.5.10-6.el8.src","summary":"Key utilities library","version":"1.5.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.1-3.el8.aarch64","release":"3.el8","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.1-3.el8.src","summary":"GnuPG IPC library","version":"2.5.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.25-9.el8.aarch64","release":"9.el8","srpm_name":"libcap","srpm_nevra":"libcap-0:2.25-9.el8.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.25"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.31-1.el8.aarch64","release":"1.el8","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.31-1.el8.src","summary":"Library for error values used by GnuPG components","version":"1.31"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.8.3-2.el8.aarch64","release":"2.el8","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.8.3-2.el8.src","summary":"A general-purpose cryptography library","version":"1.8.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.0.5-1.el8.aarch64","release":"1.el8","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.0.5-1.el8.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.0.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libmetalink","nvra":"libmetalink-0.1.3-7.el8.aarch64","release":"7.el8","srpm_name":"libmetalink","srpm_nevra":"libmetalink-0:0.1.3-7.el8.src","summary":"Metalink library written in C","version":"0.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.3.5-7.el8.aarch64","release":"7.el8","srpm_name":"libksba","srpm_nevra":"libksba-0:1.3.5-7.el8.src","summary":"CMS and X.509 library","version":"1.3.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.3.2-3.el8.aarch64","release":"3.el8","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.3.2-3.el8.src","summary":"A library for handling streaming archive formats","version":"3.3.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libnsl2","nvra":"libnsl2-1.2.0-2.20180605git4a062cf.el8.aarch64","release":"2.20180605git4a062cf.el8","srpm_name":"libnsl2","srpm_nevra":"libnsl2-0:1.2.0-2.20180605git4a062cf.el8.src","summary":"Public client interface library for NIS(YP) and NIS+","version":"1.2.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.4.0-4.el8.aarch64","release":"4.el8","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.4.0-4.el8.src","summary":"Convenience library for kernel netlink sockets","version":"3.4.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libpsl","nvra":"libpsl-0.20.2-5.el8.aarch64","release":"5.el8","srpm_name":"libpsl","srpm_nevra":"libpsl-0:0.20.2-5.el8.src","summary":"C library for the Publix Suffix List","version":"0.20.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libpcap","nvra":"libpcap-1.9.0-1.el8.aarch64","release":"1.el8","srpm_name":"libpcap","srpm_nevra":"libpcap-14:1.9.0-1.el8.src","summary":"A system-independent interface for user-level packet capture","version":"1.9.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.11-5.el8.aarch64","release":"5.el8","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.11-5.el8.src","summary":"Library for handling page faults in user mode","version":"2.11"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.3.3-3.el8.aarch64","release":"3.el8","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.3.3-3.el8.src","summary":"Enhanced seccomp library","version":"2.3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.13-3.el8.aarch64","release":"3.el8","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.13-3.el8.src","summary":"The ASN.1 library used in GNUTLS","version":"4.13"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.1.6-14.el8.aarch64","release":"14.el8","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.1.6-14.el8.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.1.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.0-5.el8.aarch64","release":"5.el8","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.0-5.el8.src","summary":"Main loop abstraction library","version":"0.3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.11.0-8.el8.noarch","release":"8.el8","srpm_name":"python-six","srpm_nevra":"python-six-0:1.11.0-8.el8.src","summary":"Python 2 and 3 compatibility utilities","version":"1.11.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.1.7-5.el8.aarch64","release":"5.el8","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.1.7-5.el8.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.1.7"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.8.1.2-4.el8.aarch64","release":"4.el8","srpm_name":"lz4","srpm_nevra":"lz4-0:1.8.1.2-4.el8.src","summary":"Libaries for lz4","version":"1.8.1.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-3.1.6-1.el8.aarch64","release":"1.el8","srpm_name":"mpfr","srpm_nevra":"mpfr-0:3.1.6-1.el8.src","summary":"A C library for multiple-precision floating-point computations","version":"3.1.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.5-4.el8.aarch64","release":"4.el8","srpm_name":"npth","srpm_nevra":"npth-0:1.5-4.el8.src","summary":"The New GNU Portable Threads library","version":"1.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"publicsuffix-list-dafsa","nvra":"publicsuffix-list-dafsa-20180723-1.el8.noarch","release":"1.el8","srpm_name":"publicsuffix-list","srpm_nevra":"publicsuffix-list-0:20180723-1.el8.src","summary":"Cross-vendor public domain suffix database in DAFSA form","version":"20180723"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-2.el8.aarch64","release":"2.el8","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-2.el8.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-10.el8.aarch64","release":"10.el8","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-10.el8.src","summary":"The compression and decompression library","version":"1.2.11"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pkgconf","nvra":"pkgconf-1.4.2-1.el8.aarch64","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"Package compiler and linker metadata toolkit","version":"1.4.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pkgconf-pkg-config","nvra":"pkgconf-pkg-config-1.4.2-1.el8.aarch64","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"pkgconf shim to provide /usr/bin/pkg-config","version":"1.4.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libpkgconf","nvra":"libpkgconf-1.4.2-1.el8.aarch64","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"Backend library for pkgconf","version":"1.4.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pkgconf-m4","nvra":"pkgconf-m4-1.4.2-1.el8.noarch","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"m4 macros for pkgconf","version":"1.4.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.16-14.el8.aarch64","release":"14.el8","srpm_name":"popt","srpm_nevra":"popt-0:1.16-14.el8.src","summary":"C library for parsing command line parameters","version":"1.16"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.28.3-1.el8.aarch64","release":"1.el8","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.28.3-1.el8.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.28.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-7.0-10.el8.aarch64","release":"10.el8","srpm_name":"readline","srpm_nevra":"readline-0:7.0-10.el8.src","summary":"A library for editing typed command lines","version":"7.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2018.2.24-6.el8.noarch","release":"6.el8","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2018.2.24-6.el8.src","summary":"The Mozilla CA root certificate bundle","version":"2018.2.24"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.9-3.el8.aarch64","release":"3.el8","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.9-3.el8.src","summary":"GNU Unicode string library","version":"0.9.9"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libusbx","nvra":"libusbx-1.0.22-1.el8.aarch64","release":"1.el8","srpm_name":"libusbx","srpm_nevra":"libusbx-0:1.0.22-1.el8.src","summary":"Library for accessing USB devices","version":"1.0.22"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.9.5-6.el8.aarch64","release":"6.el8","srpm_name":"libreport","srpm_nevra":"libreport-0:2.9.5-6.el8.src","summary":"Filesystem layout for libreport","version":"2.9.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.42-4.el8.aarch64","release":"4.el8","srpm_name":"pcre","srpm_nevra":"pcre-0:8.42-4.el8.src","summary":"Perl-compatible regular expression library","version":"8.42"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.12.2-1.el8.noarch","release":"1.el8","srpm_name":"setup","srpm_nevra":"setup-0:2.12.2-1.el8.src","summary":"A set of system configuration and setup files","version":"2.12.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"chkconfig","nvra":"chkconfig-1.11-1.el8.aarch64","release":"1.el8","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.11-1.el8.src","summary":"A system tool for maintaining the /etc/rc*.d hierarchy","version":"1.11"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dmidecode","nvra":"dmidecode-3.2-1.el8.aarch64","release":"1.el8","srpm_name":"dmidecode","srpm_nevra":"dmidecode-1:3.2-1.el8.src","summary":"Tool to analyse BIOS DMI data","version":"3.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.9.2-1.el8.aarch64","release":"1.el8","srpm_name":"librepo","srpm_nevra":"librepo-0:1.9.2-1.el8.src","summary":"Repodata downloading library","version":"1.9.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.9.2-1.el8.aarch64","release":"1.el8","srpm_name":"librepo","srpm_nevra":"librepo-0:1.9.2-1.el8.src","summary":"Python 3 bindings for the librepo library","version":"1.9.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.18-1.el8.aarch64","release":"1.el8","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.18-1.el8.src","summary":"Libraries files for gdbm","version":"1.18"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gdbm","nvra":"gdbm-1.18-1.el8.aarch64","release":"1.el8","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.18-1.el8.src","summary":"A GNU set of database routines which use extensible hashing","version":"1.18"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libtirpc","nvra":"libtirpc-1.1.4-3.el8.aarch64","release":"3.el8","srpm_name":"libtirpc","srpm_nevra":"libtirpc-0:1.1.4-3.el8.src","summary":"Transport Independent RPC Library","version":"1.1.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"info","nvra":"info-6.5-4.el8.aarch64","release":"4.el8","srpm_name":"texinfo","srpm_nevra":"texinfo-0:6.5-4.el8.src","summary":"A stand-alone TTY-based reader for GNU texinfo documentation","version":"6.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.33.0-1.el8.aarch64","release":"1.el8","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.33.0-1.el8.src","summary":"A library implementing the HTTP/2 protocol","version":"1.33.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"brotli","nvra":"brotli-1.0.6-1.el8.aarch64","release":"1.el8","srpm_name":"brotli","srpm_nevra":"brotli-0:1.0.6-1.el8.src","summary":"Lossless compression algorithm","version":"1.0.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.4.4-1.el8.aarch64","release":"1.el8","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.4.4-1.el8.src","summary":"Library for JavaScript Object Notation format","version":"1.4.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.0-9.el8.aarch64","release":"9.el8","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.0-9.el8.src","summary":"A library for password generation and password quality checking","version":"1.4.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.8-7.el8.aarch64","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus","version":"1.12.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus-daemon","nvra":"dbus-daemon-1.12.8-7.el8.aarch64","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus","version":"1.12.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus-tools","nvra":"dbus-tools-1.12.8-7.el8.aarch64","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS Tools and Utilities","version":"1.12.8"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.8-7.el8.noarch","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus configuration","version":"1.12.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.8-7.el8.aarch64","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"Libraries for accessing D-BUS","version":"1.12.8"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"platform-python-setuptools","nvra":"platform-python-setuptools-39.2.0-4.el8.noarch","release":"4.el8","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:39.2.0-4.el8.src","summary":"Easily build and distribute Python 3 packages","version":"39.2.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.1-4.el8.aarch64","release":"4.el8","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.1-4.el8.src","summary":"IMA/EVM support utilities","version":"1.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.18-6.el8.aarch64","release":"6.el8","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.18-6.el8.src","summary":"Detect if we are running in a virtual machine","version":"1.18"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.6.0-20.el8.aarch64","release":"20.el8","srpm_name":"findutils","srpm_nevra":"findutils-1:4.6.0-20.el8.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.6.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.33-8.el8.aarch64","release":"8.el8","srpm_name":"file","srpm_nevra":"file-0:5.33-8.el8.src","summary":"Libraries for applications using libmagic","version":"5.33"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-2.8-2.el8.aarch64","release":"2.el8","srpm_name":"libsepol","srpm_nevra":"libsepol-0:2.8-2.el8.src","summary":"SELinux binary policy manipulation library","version":"2.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-2.8-6.el8.aarch64","release":"6.el8","srpm_name":"libselinux","srpm_nevra":"libselinux-0:2.8-6.el8.src","summary":"SELinux library and simple utilities","version":"2.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-2.el8.aarch64","release":"2.el8","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-2.el8.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-13.el8.noarch","release":"13.el8","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-13.el8.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.113-1.el8.aarch64","release":"1.el8","srpm_name":"usermode","srpm_nevra":"usermode-0:1.113-1.el8.src","summary":"Tools for certain user account management tasks","version":"1.113"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.10.0-6.el8.aarch64","release":"6.el8","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.10.0-6.el8.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.10.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.10.0-6.el8.aarch64","release":"6.el8","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.10.0-6.el8.src","summary":"gpgme bindings for Python 3","version":"1.10.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.4-3.el8.aarch64","release":"3.el8","srpm_name":"xz","srpm_nevra":"xz-0:5.2.4-3.el8.src","summary":"Libraries for decoding LZMA compression","version":"5.2.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-15.el8.aarch64","release":"15.el8","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-15.el8.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.1-18.el8.aarch64","release":"18.el8","srpm_name":"libffi","srpm_nevra":"libffi-0:3.1-18.el8.src","summary":"A portable foreign function interface library","version":"3.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.62-21.el8.aarch64","release":"21.el8","srpm_name":"libuser","srpm_nevra":"libuser-0:0.62-21.el8.src","summary":"A user and group account administration library","version":"0.62"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.0.6-1.el8.aarch64","release":"1.el8","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.0.6-1.el8.src","summary":"Cryptsetup shared library","version":"2.0.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.174-6.el8.aarch64","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Libraries to handle compiled objects","version":"0.174"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.174-6.el8.noarch","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Default yama attach scope sysctl setting","version":"0.174"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.174-6.el8.aarch64","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Library to read and write ELF files","version":"0.174"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.0.1763-10.el8.aarch64","release":"10.el8","srpm_name":"vim","srpm_nevra":"vim-2:8.0.1763-10.el8.src","summary":"A minimal version of the VIM editor","version":"8.0.1763"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-2.8-5.el8.aarch64","release":"5.el8","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:2.8-5.el8.src","summary":"SELinux binary policy manipulation library","version":"2.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.3.1-4.el8.aarch64","release":"4.el8","srpm_name":"pam","srpm_nevra":"pam-0:1.3.1-4.el8.src","summary":"An extensible library which provides authentication for applications","version":"1.3.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.14-3.el8.aarch64","release":"3.el8","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.14-3.el8.src","summary":"Python module to interface with ethtool","version":"0.14"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-8.2.1-3.5.el8.aarch64","release":"3.5.el8","srpm_name":"gcc","srpm_nevra":"gcc-0:8.2.1-3.5.el8.src","summary":"GNU Standard C++ Library","version":"8.2.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-8.2.1-3.5.el8.aarch64","release":"3.5.el8","srpm_name":"gcc","srpm_nevra":"gcc-0:8.2.1-3.5.el8.src","summary":"GCC version 8 shared support library","version":"8.2.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.32.1-8.el8.aarch64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Partitioning library for fdisk-like programs.","version":"2.32.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.32.1-8.el8.aarch64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Device mounting library","version":"2.32.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.32.1-8.el8.aarch64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Formatting library for ls-like programs.","version":"2.32.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.32.1-8.el8.aarch64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"A collection of basic system utilities","version":"2.32.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.32.1-8.el8.aarch64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Block device ID library","version":"2.32.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.32.1-8.el8.aarch64","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Universally unique ID library","version":"2.32.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.4.1-1.el8.aarch64","release":"1.el8","srpm_name":"nettle","srpm_nevra":"nettle-0:3.4.1-1.el8.src","summary":"A low-level cryptographic library","version":"3.4.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.8-13.el8.aarch64","release":"13.el8","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.8-13.el8.src","summary":"Python 3 bindings for libcomps library","version":"0.1.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.8-13.el8.aarch64","release":"13.el8","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.8-13.el8.src","summary":"Comps XML file manipulation library","version":"0.1.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-1.1.1-8.el8.aarch64","release":"8.el8","srpm_name":"openssl","srpm_nevra":"openssl-1:1.1.1-8.el8.src","summary":"A general purpose cryptography library with TLS implementation","version":"1.1.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.32-1.el8.aarch64","release":"1.el8","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.32-1.el8.src","summary":"Perl-compatible regular expression library","version":"10.32"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libssh","nvra":"libssh-0.8.5-2.el8.aarch64","release":"2.el8","srpm_name":"libssh","srpm_nevra":"libssh-0:0.8.5-2.el8.src","summary":"A library implementing the SSH protocol","version":"0.8.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"platform-python-pip","nvra":"platform-python-pip-9.0.3-13.el8.noarch","release":"13.el8","srpm_name":"python-pip","srpm_nevra":"python-pip-0:9.0.3-13.el8.src","summary":"A tool for installing and managing Python3 packages","version":"9.0.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.44.3-2.el8.aarch64","release":"2.el8","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.44.3-2.el8.src","summary":"Common error description library","version":"1.44.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.46-9.el8.aarch64","release":"9.el8","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.46-9.el8.src","summary":"LDAP support libraries","version":"2.4.46"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.6-7.el8.aarch64","release":"7.el8","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.6-7.el8.src","summary":"Utilities for managing accounts and shadow password files","version":"4.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.14.2-9.el8.aarch64","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Libraries for building and signing RPM packages","version":"4.14.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.14.2-9.el8.aarch64","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"The RPM package management system","version":"4.14.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.14.2-9.el8.aarch64","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.14.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.14.2-9.el8.aarch64","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Libraries for manipulating RPM packages","version":"4.14.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.26.0-3.el8.aarch64","release":"3.el8","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.26.0-3.el8.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.26.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.2.2-3.el8.noarch","release":"3.el8","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.2.2-3.el8.src","summary":"Core Plugins for DNF","version":"4.0.2.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.7.9-4.el8.aarch64","release":"4.el8","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.7.9-4.el8.src","summary":"An alternate posix capabilities library","version":"0.7.9"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0-0.10.20180831git0047a6c.el8.aarch64","release":"0.10.20180831git0047a6c.el8","srpm_name":"audit","srpm_nevra":"audit-0:3.0-0.10.20180831git0047a6c.el8.src","summary":"Dynamic library for libaudit","version":"3.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"curl","nvra":"curl-7.61.1-8.el8.aarch64","release":"8.el8","srpm_name":"curl","srpm_nevra":"curl-0:7.61.1-8.el8.src","summary":"A utility for getting files from remote servers (FTP, HTTP, and others)","version":"7.61.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcurl","nvra":"libcurl-7.61.1-8.el8.aarch64","release":"8.el8","srpm_name":"curl","srpm_nevra":"curl-0:7.61.1-8.el8.src","summary":"A library for getting files from web servers","version":"7.61.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.6.5-2.el8.aarch64","release":"2.el8","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.6.5-2.el8.src","summary":"A TLS protocol implementation","version":"3.6.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.30-6.el8.aarch64","release":"6.el8","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.30-6.el8.src","summary":"coreutils multicall binary","version":"8.30"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-8.2-5.el8.aarch64","release":"5.el8","srpm_name":"gdb","srpm_nevra":"gdb-0:8.2-5.el8.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"8.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-4.4.19-7.el8.aarch64","release":"7.el8","srpm_name":"bash","srpm_nevra":"bash-0:4.4.19-7.el8.src","summary":"The GNU Bourne Again shell","version":"4.4.19"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.56.4-1.el8.aarch64","release":"1.el8","srpm_name":"glib2","srpm_nevra":"glib2-0:2.56.4-1.el8.src","summary":"A library of handy utility functions","version":"2.56.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.1-7.20180224.el8.aarch64","release":"7.20180224.el8","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.1-7.20180224.el8.src","summary":"Ncurses libraries","version":"6.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.1-7.20180224.el8.noarch","release":"7.20180224.el8","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.1-7.20180224.el8.src","summary":"Descriptions of common terminals","version":"6.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libmodulemd1","nvra":"libmodulemd1-1.8.0-5.el8.aarch64","release":"5.el8","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.0.0-5.el8.src","summary":"Compatibility package for libmodulemd 1.x","version":"1.8.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-36.el8.aarch64","release":"36.el8","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-36.el8.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libdb-utils","nvra":"libdb-utils-5.3.28-36.el8.aarch64","release":"36.el8","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-36.el8.src","summary":"Command line tools for managing Berkeley DB databases","version":"5.3.28"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.16.1-22.el8.aarch64","release":"22.el8","srpm_name":"krb5","srpm_nevra":"krb5-0:1.16.1-22.el8.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.16.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.6.35-6.el8.aarch64","release":"6.el8","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.6.35-6.el8.src","summary":"Package dependency solver","version":"0.6.35"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"iptables-libs","nvra":"iptables-libs-1.8.2-9.el8.aarch64","release":"9.el8","srpm_name":"iptables","srpm_nevra":"iptables-0:1.8.2-9.el8.src","summary":"iptables libraries","version":"1.8.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Package manager","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Common data and configuration files for DNF","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Python 3 interface to DNF","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Package manager","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20181217-6.git9a35207.el8.noarch","release":"6.git9a35207.el8","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20181217-6.git9a35207.el8.src","summary":"Systemwide crypto policies","version":"20181217"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.155-6.el8.aarch64","release":"6.el8","srpm_name":"lvm2","srpm_nevra":"lvm2-8:2.03.02-6.el8.src","summary":"Device mapper utility","version":"1.02.155"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.155-6.el8.aarch64","release":"6.el8","srpm_name":"lvm2","srpm_nevra":"lvm2-8:2.03.02-6.el8.src","summary":"Device-mapper shared library","version":"1.02.155"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-8.0-0.44.el8.aarch64","release":"0.44.el8","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:8.0-0.44.el8.src","summary":"Red Hat Enterprise Linux release file","version":"8.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.23.8-35.el8.aarch64","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.23.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.23.8-35.el8.aarch64","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.23.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.23.8-35.el8.aarch64","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Tools and libraries for subscription and repository management","version":"1.23.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dnf-plugin-subscription-manager","nvra":"dnf-plugin-subscription-manager-1.23.8-35.el8.aarch64","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Subscription Manager plugins for DNF","version":"1.23.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-syspurpose","nvra":"python3-syspurpose-1.23.8-35.el8.aarch64","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"A commandline utility for declaring system syspurpose","version":"1.23.8"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2019a-1.el8.noarch","release":"1.el8","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2019a-1.el8.src","summary":"Timezone data","version":"2019a"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.23.14-5.el8_0.aarch64","release":"5.el8_0","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.23.14-5.el8_0.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.23.14"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.23.14-5.el8_0.aarch64","release":"5.el8_0","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.23.14-5.el8_0.src","summary":"System trust module from p11-kit","version":"0.23.14"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.28-42.el8_0.1.aarch64","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"Common binaries and locale data for glibc","version":"2.28"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.28-42.el8_0.1.aarch64","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"The GNU libc libraries","version":"2.28"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.28-42.el8_0.1.aarch64","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"Minimal language packs for glibc.","version":"2.28"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.22.5-5.el8_0.aarch64","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.22.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.22.5-5.el8_0.aarch64","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.22.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.22.5-5.el8_0.aarch64","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.22.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-25-11.el8_0.2.aarch64","release":"11.el8_0.2","srpm_name":"kmod","srpm_nevra":"kmod-0:25-11.el8_0.2.src","summary":"Libraries to handle kernel module loading and unloading","version":"25"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.6.8-2.el8_0.aarch64","release":"2.el8_0","srpm_name":"python3","srpm_nevra":"python3-0:3.6.8-2.el8_0.src","summary":"Python runtime libraries","version":"3.6.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"platform-python","nvra":"platform-python-3.6.8-2.el8_0.aarch64","release":"2.el8_0","srpm_name":"python3","srpm_nevra":"python3-0:3.6.8-2.el8_0.src","summary":"Internal interpreter of the Python programming language","version":"3.6.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-239-13.el8_0.3.aarch64","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"systemd PAM module","version":"239"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-239-13.el8_0.3.aarch64","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"systemd libraries","version":"239"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-239-13.el8_0.3.aarch64","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"System and Service Manager","version":"239"}],"_links":{"image":{"href":"/v1/images/id/5cc9ca3fdd19c7782937e02c"}}} +-- catalog.redhat.com/api/containers/v1/images/id/5cc9ca42dd19c7782937e032/rpm-manifest -- +{"_id":"5cc9ca43dd19c7782937e03a","creation_date":"2019-05-01T16:33:07.428000+00:00","image_id":"5cc9ca42dd19c7782937e032","last_update_date":"2024-09-06T10:10:04.018000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.1.1-4.el8.ppc64le","release":"4.el8","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.1.1-4.el8.src","summary":"Extended crypt library for DES, MD5, Blowfish and others","version":"4.1.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.1-6.el8.ppc64le","release":"6.el8","srpm_name":"grep","srpm_nevra":"grep-0:3.1-6.el8.src","summary":"Pattern matching utilities","version":"3.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.3.4-10.el8.ppc64le","release":"10.el8","srpm_name":"lua","srpm_nevra":"lua-0:5.3.4-10.el8.src","summary":"Libraries for lua","version":"5.3.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-10.el8.ppc64le","release":"10.el8","srpm_name":"which","srpm_nevra":"which-0:2.21-10.el8.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.9-4.el8.ppc64le","release":"4.el8","srpm_name":"gzip","srpm_nevra":"gzip-0:1.9-4.el8.src","summary":"The GNU data compression program","version":"1.9"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.6-26.el8.ppc64le","release":"26.el8","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.6-26.el8.src","summary":"Libraries for applications using bzip2","version":"1.0.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.5-1.el8.ppc64le","release":"1.el8","srpm_name":"sed","srpm_nevra":"sed-0:4.5-1.el8.src","summary":"A GNU stream text editor","version":"4.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.30-4.el8.ppc64le","release":"4.el8","srpm_name":"tar","srpm_nevra":"tar-2:1.30-4.el8.src","summary":"A GNU file archiving program","version":"1.30"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-4.2.1-1.el8.ppc64le","release":"1.el8","srpm_name":"gawk","srpm_nevra":"gawk-0:4.2.1-1.el8.src","summary":"The GNU version of the AWK text processing utility","version":"4.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-5.el8.noarch","release":"5.el8","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-5.el8.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.2.53-1.el8.ppc64le","release":"1.el8","srpm_name":"acl","srpm_nevra":"acl-0:2.2.53-1.el8.src","summary":"Dynamic library for access control list support","version":"2.2.53"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.2.53-1.el8.ppc64le","release":"1.el8","srpm_name":"acl","srpm_nevra":"acl-0:2.2.53-1.el8.src","summary":"Access control list utilities","version":"2.2.53"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.4.48-3.el8.ppc64le","release":"3.el8","srpm_name":"attr","srpm_nevra":"attr-0:2.4.48-3.el8.src","summary":"Dynamic library for extended attribute support","version":"2.4.48"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-0.3rc7.el8.ppc64le","release":"0.3rc7.el8","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-0.3rc7.el8.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus-glib","nvra":"dbus-glib-0.110-2.el8.ppc64le","release":"2.el8","srpm_name":"dbus-glib","srpm_nevra":"dbus-glib-0:0.110-2.el8.src","summary":"GLib bindings for D-Bus","version":"0.110"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.4-14.el8.ppc64le","release":"14.el8","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.4-14.el8.src","summary":"D-Bus bindings for python3","version":"1.2.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.8-2.el8.ppc64le","release":"2.el8","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.8-2.el8.src","summary":"The basic directory layout for a Linux system","version":"3.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.5-3.el8.ppc64le","release":"3.el8","srpm_name":"expat","srpm_nevra":"expat-0:2.2.5-3.el8.src","summary":"An XML parser library","version":"2.2.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.7-5.el8.ppc64le","release":"5.el8","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.7-5.el8.src","summary":"Library providing XML and HTML support","version":"2.9.7"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.1.2-8.el8.ppc64le","release":"8.el8","srpm_name":"gmp","srpm_nevra":"gmp-1:6.1.2-8.el8.src","summary":"A GNU arbitrary precision library","version":"6.1.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.2.1-2.el8.noarch","release":"2.el8","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.2.1-2.el8.src","summary":"Module to simplify usage of decorators in python3","version":"4.2.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.56.1-1.el8.ppc64le","release":"1.el8","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.56.1-1.el8.src","summary":"Introspection system for GObject-based libraries","version":"1.56.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-1.0-12.el8.noarch","release":"12.el8","srpm_name":"langpacks","srpm_nevra":"langpacks-0:1.0-12.el8.src","summary":"English langpacks meta-package","version":"1.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.6.1-6.el8.noarch","release":"6.el8","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.6.1-6.el8.src","summary":"Powerful extensions to the standard datetime module","version":"2.6.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.2.9-1.el8.ppc64le","release":"1.el8","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.2.9-1.el8.src","summary":"Utility for secure communication and data storage","version":"2.2.9"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-31.el8.noarch","release":"31.el8","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-31.el8.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.13.1-0.2.el8.ppc64le","release":"0.2.el8","srpm_name":"json-c","srpm_nevra":"json-c-0:0.13.1-0.2.el8.src","summary":"JSON implementation in C","version":"0.13.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.5.10-6.el8.ppc64le","release":"6.el8","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.5.10-6.el8.src","summary":"Key utilities library","version":"1.5.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.1-3.el8.ppc64le","release":"3.el8","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.1-3.el8.src","summary":"GnuPG IPC library","version":"2.5.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.25-9.el8.ppc64le","release":"9.el8","srpm_name":"libcap","srpm_nevra":"libcap-0:2.25-9.el8.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.25"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.31-1.el8.ppc64le","release":"1.el8","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.31-1.el8.src","summary":"Library for error values used by GnuPG components","version":"1.31"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.8.3-2.el8.ppc64le","release":"2.el8","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.8.3-2.el8.src","summary":"A general-purpose cryptography library","version":"1.8.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.0.5-1.el8.ppc64le","release":"1.el8","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.0.5-1.el8.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.0.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libmetalink","nvra":"libmetalink-0.1.3-7.el8.ppc64le","release":"7.el8","srpm_name":"libmetalink","srpm_nevra":"libmetalink-0:0.1.3-7.el8.src","summary":"Metalink library written in C","version":"0.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.3.5-7.el8.ppc64le","release":"7.el8","srpm_name":"libksba","srpm_nevra":"libksba-0:1.3.5-7.el8.src","summary":"CMS and X.509 library","version":"1.3.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.3.2-3.el8.ppc64le","release":"3.el8","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.3.2-3.el8.src","summary":"A library for handling streaming archive formats","version":"3.3.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libnsl2","nvra":"libnsl2-1.2.0-2.20180605git4a062cf.el8.ppc64le","release":"2.20180605git4a062cf.el8","srpm_name":"libnsl2","srpm_nevra":"libnsl2-0:1.2.0-2.20180605git4a062cf.el8.src","summary":"Public client interface library for NIS(YP) and NIS+","version":"1.2.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.4.0-4.el8.ppc64le","release":"4.el8","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.4.0-4.el8.src","summary":"Convenience library for kernel netlink sockets","version":"3.4.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libpsl","nvra":"libpsl-0.20.2-5.el8.ppc64le","release":"5.el8","srpm_name":"libpsl","srpm_nevra":"libpsl-0:0.20.2-5.el8.src","summary":"C library for the Publix Suffix List","version":"0.20.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libpcap","nvra":"libpcap-1.9.0-1.el8.ppc64le","release":"1.el8","srpm_name":"libpcap","srpm_nevra":"libpcap-14:1.9.0-1.el8.src","summary":"A system-independent interface for user-level packet capture","version":"1.9.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.11-5.el8.ppc64le","release":"5.el8","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.11-5.el8.src","summary":"Library for handling page faults in user mode","version":"2.11"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.3.3-3.el8.ppc64le","release":"3.el8","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.3.3-3.el8.src","summary":"Enhanced seccomp library","version":"2.3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.13-3.el8.ppc64le","release":"3.el8","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.13-3.el8.src","summary":"The ASN.1 library used in GNUTLS","version":"4.13"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.1.6-14.el8.ppc64le","release":"14.el8","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.1.6-14.el8.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.1.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.0-5.el8.ppc64le","release":"5.el8","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.0-5.el8.src","summary":"Main loop abstraction library","version":"0.3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.11.0-8.el8.noarch","release":"8.el8","srpm_name":"python-six","srpm_nevra":"python-six-0:1.11.0-8.el8.src","summary":"Python 2 and 3 compatibility utilities","version":"1.11.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.1.7-5.el8.ppc64le","release":"5.el8","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.1.7-5.el8.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.1.7"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.8.1.2-4.el8.ppc64le","release":"4.el8","srpm_name":"lz4","srpm_nevra":"lz4-0:1.8.1.2-4.el8.src","summary":"Libaries for lz4","version":"1.8.1.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-3.1.6-1.el8.ppc64le","release":"1.el8","srpm_name":"mpfr","srpm_nevra":"mpfr-0:3.1.6-1.el8.src","summary":"A C library for multiple-precision floating-point computations","version":"3.1.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.5-4.el8.ppc64le","release":"4.el8","srpm_name":"npth","srpm_nevra":"npth-0:1.5-4.el8.src","summary":"The New GNU Portable Threads library","version":"1.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"publicsuffix-list-dafsa","nvra":"publicsuffix-list-dafsa-20180723-1.el8.noarch","release":"1.el8","srpm_name":"publicsuffix-list","srpm_nevra":"publicsuffix-list-0:20180723-1.el8.src","summary":"Cross-vendor public domain suffix database in DAFSA form","version":"20180723"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-2.el8.ppc64le","release":"2.el8","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-2.el8.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-10.el8.ppc64le","release":"10.el8","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-10.el8.src","summary":"The compression and decompression library","version":"1.2.11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pkgconf-m4","nvra":"pkgconf-m4-1.4.2-1.el8.noarch","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"m4 macros for pkgconf","version":"1.4.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pkgconf","nvra":"pkgconf-1.4.2-1.el8.ppc64le","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"Package compiler and linker metadata toolkit","version":"1.4.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pkgconf-pkg-config","nvra":"pkgconf-pkg-config-1.4.2-1.el8.ppc64le","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"pkgconf shim to provide /usr/bin/pkg-config","version":"1.4.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libpkgconf","nvra":"libpkgconf-1.4.2-1.el8.ppc64le","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"Backend library for pkgconf","version":"1.4.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.16-14.el8.ppc64le","release":"14.el8","srpm_name":"popt","srpm_nevra":"popt-0:1.16-14.el8.src","summary":"C library for parsing command line parameters","version":"1.16"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.28.3-1.el8.ppc64le","release":"1.el8","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.28.3-1.el8.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.28.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-7.0-10.el8.ppc64le","release":"10.el8","srpm_name":"readline","srpm_nevra":"readline-0:7.0-10.el8.src","summary":"A library for editing typed command lines","version":"7.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2018.2.24-6.el8.noarch","release":"6.el8","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2018.2.24-6.el8.src","summary":"The Mozilla CA root certificate bundle","version":"2018.2.24"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.9-3.el8.ppc64le","release":"3.el8","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.9-3.el8.src","summary":"GNU Unicode string library","version":"0.9.9"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libusbx","nvra":"libusbx-1.0.22-1.el8.ppc64le","release":"1.el8","srpm_name":"libusbx","srpm_nevra":"libusbx-0:1.0.22-1.el8.src","summary":"Library for accessing USB devices","version":"1.0.22"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.9.5-6.el8.ppc64le","release":"6.el8","srpm_name":"libreport","srpm_nevra":"libreport-0:2.9.5-6.el8.src","summary":"Filesystem layout for libreport","version":"2.9.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.42-4.el8.ppc64le","release":"4.el8","srpm_name":"pcre","srpm_nevra":"pcre-0:8.42-4.el8.src","summary":"Perl-compatible regular expression library","version":"8.42"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.12.2-1.el8.noarch","release":"1.el8","srpm_name":"setup","srpm_nevra":"setup-0:2.12.2-1.el8.src","summary":"A set of system configuration and setup files","version":"2.12.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"chkconfig","nvra":"chkconfig-1.11-1.el8.ppc64le","release":"1.el8","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.11-1.el8.src","summary":"A system tool for maintaining the /etc/rc*.d hierarchy","version":"1.11"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.9.2-1.el8.ppc64le","release":"1.el8","srpm_name":"librepo","srpm_nevra":"librepo-0:1.9.2-1.el8.src","summary":"Python 3 bindings for the librepo library","version":"1.9.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.9.2-1.el8.ppc64le","release":"1.el8","srpm_name":"librepo","srpm_nevra":"librepo-0:1.9.2-1.el8.src","summary":"Repodata downloading library","version":"1.9.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gdbm","nvra":"gdbm-1.18-1.el8.ppc64le","release":"1.el8","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.18-1.el8.src","summary":"A GNU set of database routines which use extensible hashing","version":"1.18"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.18-1.el8.ppc64le","release":"1.el8","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.18-1.el8.src","summary":"Libraries files for gdbm","version":"1.18"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libtirpc","nvra":"libtirpc-1.1.4-3.el8.ppc64le","release":"3.el8","srpm_name":"libtirpc","srpm_nevra":"libtirpc-0:1.1.4-3.el8.src","summary":"Transport Independent RPC Library","version":"1.1.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"info","nvra":"info-6.5-4.el8.ppc64le","release":"4.el8","srpm_name":"texinfo","srpm_nevra":"texinfo-0:6.5-4.el8.src","summary":"A stand-alone TTY-based reader for GNU texinfo documentation","version":"6.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.33.0-1.el8.ppc64le","release":"1.el8","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.33.0-1.el8.src","summary":"A library implementing the HTTP/2 protocol","version":"1.33.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"brotli","nvra":"brotli-1.0.6-1.el8.ppc64le","release":"1.el8","srpm_name":"brotli","srpm_nevra":"brotli-0:1.0.6-1.el8.src","summary":"Lossless compression algorithm","version":"1.0.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.4.4-1.el8.ppc64le","release":"1.el8","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.4.4-1.el8.src","summary":"Library for JavaScript Object Notation format","version":"1.4.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.0-9.el8.ppc64le","release":"9.el8","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.0-9.el8.src","summary":"A library for password generation and password quality checking","version":"1.4.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.8-7.el8.noarch","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus configuration","version":"1.12.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.8-7.el8.ppc64le","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"Libraries for accessing D-BUS","version":"1.12.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.8-7.el8.ppc64le","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus","version":"1.12.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus-daemon","nvra":"dbus-daemon-1.12.8-7.el8.ppc64le","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus","version":"1.12.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus-tools","nvra":"dbus-tools-1.12.8-7.el8.ppc64le","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS Tools and Utilities","version":"1.12.8"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"platform-python-setuptools","nvra":"platform-python-setuptools-39.2.0-4.el8.noarch","release":"4.el8","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:39.2.0-4.el8.src","summary":"Easily build and distribute Python 3 packages","version":"39.2.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.1-4.el8.ppc64le","release":"4.el8","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.1-4.el8.src","summary":"IMA/EVM support utilities","version":"1.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.18-6.el8.ppc64le","release":"6.el8","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.18-6.el8.src","summary":"Detect if we are running in a virtual machine","version":"1.18"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.6.0-20.el8.ppc64le","release":"20.el8","srpm_name":"findutils","srpm_nevra":"findutils-1:4.6.0-20.el8.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.6.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.33-8.el8.ppc64le","release":"8.el8","srpm_name":"file","srpm_nevra":"file-0:5.33-8.el8.src","summary":"Libraries for applications using libmagic","version":"5.33"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-2.8-2.el8.ppc64le","release":"2.el8","srpm_name":"libsepol","srpm_nevra":"libsepol-0:2.8-2.el8.src","summary":"SELinux binary policy manipulation library","version":"2.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-2.8-6.el8.ppc64le","release":"6.el8","srpm_name":"libselinux","srpm_nevra":"libselinux-0:2.8-6.el8.src","summary":"SELinux library and simple utilities","version":"2.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-2.el8.ppc64le","release":"2.el8","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-2.el8.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-13.el8.noarch","release":"13.el8","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-13.el8.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.113-1.el8.ppc64le","release":"1.el8","srpm_name":"usermode","srpm_nevra":"usermode-0:1.113-1.el8.src","summary":"Tools for certain user account management tasks","version":"1.113"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.10.0-6.el8.ppc64le","release":"6.el8","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.10.0-6.el8.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.10.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.10.0-6.el8.ppc64le","release":"6.el8","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.10.0-6.el8.src","summary":"gpgme bindings for Python 3","version":"1.10.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.4-3.el8.ppc64le","release":"3.el8","srpm_name":"xz","srpm_nevra":"xz-0:5.2.4-3.el8.src","summary":"Libraries for decoding LZMA compression","version":"5.2.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-15.el8.ppc64le","release":"15.el8","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-15.el8.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.1-18.el8.ppc64le","release":"18.el8","srpm_name":"libffi","srpm_nevra":"libffi-0:3.1-18.el8.src","summary":"A portable foreign function interface library","version":"3.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.62-21.el8.ppc64le","release":"21.el8","srpm_name":"libuser","srpm_nevra":"libuser-0:0.62-21.el8.src","summary":"A user and group account administration library","version":"0.62"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.0.6-1.el8.ppc64le","release":"1.el8","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.0.6-1.el8.src","summary":"Cryptsetup shared library","version":"2.0.6"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.174-6.el8.noarch","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Default yama attach scope sysctl setting","version":"0.174"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.174-6.el8.ppc64le","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Library to read and write ELF files","version":"0.174"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.174-6.el8.ppc64le","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Libraries to handle compiled objects","version":"0.174"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.0.1763-10.el8.ppc64le","release":"10.el8","srpm_name":"vim","srpm_nevra":"vim-2:8.0.1763-10.el8.src","summary":"A minimal version of the VIM editor","version":"8.0.1763"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-2.8-5.el8.ppc64le","release":"5.el8","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:2.8-5.el8.src","summary":"SELinux binary policy manipulation library","version":"2.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.3.1-4.el8.ppc64le","release":"4.el8","srpm_name":"pam","srpm_nevra":"pam-0:1.3.1-4.el8.src","summary":"An extensible library which provides authentication for applications","version":"1.3.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.14-3.el8.ppc64le","release":"3.el8","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.14-3.el8.src","summary":"Python module to interface with ethtool","version":"0.14"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-8.2.1-3.5.el8.ppc64le","release":"3.5.el8","srpm_name":"gcc","srpm_nevra":"gcc-0:8.2.1-3.5.el8.src","summary":"GCC version 8 shared support library","version":"8.2.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-8.2.1-3.5.el8.ppc64le","release":"3.5.el8","srpm_name":"gcc","srpm_nevra":"gcc-0:8.2.1-3.5.el8.src","summary":"GNU Standard C++ Library","version":"8.2.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.32.1-8.el8.ppc64le","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Partitioning library for fdisk-like programs.","version":"2.32.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.32.1-8.el8.ppc64le","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Universally unique ID library","version":"2.32.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.32.1-8.el8.ppc64le","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Formatting library for ls-like programs.","version":"2.32.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.32.1-8.el8.ppc64le","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Block device ID library","version":"2.32.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.32.1-8.el8.ppc64le","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Device mounting library","version":"2.32.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.32.1-8.el8.ppc64le","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"A collection of basic system utilities","version":"2.32.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.4.1-1.el8.ppc64le","release":"1.el8","srpm_name":"nettle","srpm_nevra":"nettle-0:3.4.1-1.el8.src","summary":"A low-level cryptographic library","version":"3.4.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.8-13.el8.ppc64le","release":"13.el8","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.8-13.el8.src","summary":"Comps XML file manipulation library","version":"0.1.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.8-13.el8.ppc64le","release":"13.el8","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.8-13.el8.src","summary":"Python 3 bindings for libcomps library","version":"0.1.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-1.1.1-8.el8.ppc64le","release":"8.el8","srpm_name":"openssl","srpm_nevra":"openssl-1:1.1.1-8.el8.src","summary":"A general purpose cryptography library with TLS implementation","version":"1.1.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.32-1.el8.ppc64le","release":"1.el8","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.32-1.el8.src","summary":"Perl-compatible regular expression library","version":"10.32"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libssh","nvra":"libssh-0.8.5-2.el8.ppc64le","release":"2.el8","srpm_name":"libssh","srpm_nevra":"libssh-0:0.8.5-2.el8.src","summary":"A library implementing the SSH protocol","version":"0.8.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"platform-python-pip","nvra":"platform-python-pip-9.0.3-13.el8.noarch","release":"13.el8","srpm_name":"python-pip","srpm_nevra":"python-pip-0:9.0.3-13.el8.src","summary":"A tool for installing and managing Python3 packages","version":"9.0.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.44.3-2.el8.ppc64le","release":"2.el8","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.44.3-2.el8.src","summary":"Common error description library","version":"1.44.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.46-9.el8.ppc64le","release":"9.el8","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.46-9.el8.src","summary":"LDAP support libraries","version":"2.4.46"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.6-7.el8.ppc64le","release":"7.el8","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.6-7.el8.src","summary":"Utilities for managing accounts and shadow password files","version":"4.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.14.2-9.el8.ppc64le","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"The RPM package management system","version":"4.14.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.14.2-9.el8.ppc64le","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.14.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.14.2-9.el8.ppc64le","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Libraries for building and signing RPM packages","version":"4.14.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.14.2-9.el8.ppc64le","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Libraries for manipulating RPM packages","version":"4.14.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.26.0-3.el8.ppc64le","release":"3.el8","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.26.0-3.el8.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.26.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.2.2-3.el8.noarch","release":"3.el8","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.2.2-3.el8.src","summary":"Core Plugins for DNF","version":"4.0.2.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.7.9-4.el8.ppc64le","release":"4.el8","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.7.9-4.el8.src","summary":"An alternate posix capabilities library","version":"0.7.9"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0-0.10.20180831git0047a6c.el8.ppc64le","release":"0.10.20180831git0047a6c.el8","srpm_name":"audit","srpm_nevra":"audit-0:3.0-0.10.20180831git0047a6c.el8.src","summary":"Dynamic library for libaudit","version":"3.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"curl","nvra":"curl-7.61.1-8.el8.ppc64le","release":"8.el8","srpm_name":"curl","srpm_nevra":"curl-0:7.61.1-8.el8.src","summary":"A utility for getting files from remote servers (FTP, HTTP, and others)","version":"7.61.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcurl","nvra":"libcurl-7.61.1-8.el8.ppc64le","release":"8.el8","srpm_name":"curl","srpm_nevra":"curl-0:7.61.1-8.el8.src","summary":"A library for getting files from web servers","version":"7.61.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.6.5-2.el8.ppc64le","release":"2.el8","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.6.5-2.el8.src","summary":"A TLS protocol implementation","version":"3.6.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.30-6.el8.ppc64le","release":"6.el8","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.30-6.el8.src","summary":"coreutils multicall binary","version":"8.30"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-8.2-5.el8.ppc64le","release":"5.el8","srpm_name":"gdb","srpm_nevra":"gdb-0:8.2-5.el8.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"8.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-4.4.19-7.el8.ppc64le","release":"7.el8","srpm_name":"bash","srpm_nevra":"bash-0:4.4.19-7.el8.src","summary":"The GNU Bourne Again shell","version":"4.4.19"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.56.4-1.el8.ppc64le","release":"1.el8","srpm_name":"glib2","srpm_nevra":"glib2-0:2.56.4-1.el8.src","summary":"A library of handy utility functions","version":"2.56.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.1-7.20180224.el8.noarch","release":"7.20180224.el8","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.1-7.20180224.el8.src","summary":"Descriptions of common terminals","version":"6.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.1-7.20180224.el8.ppc64le","release":"7.20180224.el8","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.1-7.20180224.el8.src","summary":"Ncurses libraries","version":"6.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libmodulemd1","nvra":"libmodulemd1-1.8.0-5.el8.ppc64le","release":"5.el8","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.0.0-5.el8.src","summary":"Compatibility package for libmodulemd 1.x","version":"1.8.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libdb-utils","nvra":"libdb-utils-5.3.28-36.el8.ppc64le","release":"36.el8","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-36.el8.src","summary":"Command line tools for managing Berkeley DB databases","version":"5.3.28"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-36.el8.ppc64le","release":"36.el8","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-36.el8.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.16.1-22.el8.ppc64le","release":"22.el8","srpm_name":"krb5","srpm_nevra":"krb5-0:1.16.1-22.el8.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.16.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.6.35-6.el8.ppc64le","release":"6.el8","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.6.35-6.el8.src","summary":"Package dependency solver","version":"0.6.35"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"iptables-libs","nvra":"iptables-libs-1.8.2-9.el8.ppc64le","release":"9.el8","srpm_name":"iptables","srpm_nevra":"iptables-0:1.8.2-9.el8.src","summary":"iptables libraries","version":"1.8.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Package manager","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Common data and configuration files for DNF","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Python 3 interface to DNF","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Package manager","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20181217-6.git9a35207.el8.noarch","release":"6.git9a35207.el8","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20181217-6.git9a35207.el8.src","summary":"Systemwide crypto policies","version":"20181217"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.155-6.el8.ppc64le","release":"6.el8","srpm_name":"lvm2","srpm_nevra":"lvm2-8:2.03.02-6.el8.src","summary":"Device-mapper shared library","version":"1.02.155"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.155-6.el8.ppc64le","release":"6.el8","srpm_name":"lvm2","srpm_nevra":"lvm2-8:2.03.02-6.el8.src","summary":"Device mapper utility","version":"1.02.155"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-8.0-0.44.el8.ppc64le","release":"0.44.el8","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:8.0-0.44.el8.src","summary":"Red Hat Enterprise Linux release file","version":"8.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.23.8-35.el8.ppc64le","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Tools and libraries for subscription and repository management","version":"1.23.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-syspurpose","nvra":"python3-syspurpose-1.23.8-35.el8.ppc64le","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"A commandline utility for declaring system syspurpose","version":"1.23.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dnf-plugin-subscription-manager","nvra":"dnf-plugin-subscription-manager-1.23.8-35.el8.ppc64le","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Subscription Manager plugins for DNF","version":"1.23.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.23.8-35.el8.ppc64le","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.23.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.23.8-35.el8.ppc64le","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.23.8"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2019a-1.el8.noarch","release":"1.el8","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2019a-1.el8.src","summary":"Timezone data","version":"2019a"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.23.14-5.el8_0.ppc64le","release":"5.el8_0","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.23.14-5.el8_0.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.23.14"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.23.14-5.el8_0.ppc64le","release":"5.el8_0","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.23.14-5.el8_0.src","summary":"System trust module from p11-kit","version":"0.23.14"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.28-42.el8_0.1.ppc64le","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"The GNU libc libraries","version":"2.28"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.28-42.el8_0.1.ppc64le","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"Common binaries and locale data for glibc","version":"2.28"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.28-42.el8_0.1.ppc64le","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"Minimal language packs for glibc.","version":"2.28"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.22.5-5.el8_0.ppc64le","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.22.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.22.5-5.el8_0.ppc64le","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.22.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.22.5-5.el8_0.ppc64le","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.22.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-25-11.el8_0.2.ppc64le","release":"11.el8_0.2","srpm_name":"kmod","srpm_nevra":"kmod-0:25-11.el8_0.2.src","summary":"Libraries to handle kernel module loading and unloading","version":"25"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"platform-python","nvra":"platform-python-3.6.8-2.el8_0.ppc64le","release":"2.el8_0","srpm_name":"python3","srpm_nevra":"python3-0:3.6.8-2.el8_0.src","summary":"Internal interpreter of the Python programming language","version":"3.6.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.6.8-2.el8_0.ppc64le","release":"2.el8_0","srpm_name":"python3","srpm_nevra":"python3-0:3.6.8-2.el8_0.src","summary":"Python runtime libraries","version":"3.6.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-239-13.el8_0.3.ppc64le","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"systemd libraries","version":"239"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-239-13.el8_0.3.ppc64le","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"systemd PAM module","version":"239"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-239-13.el8_0.3.ppc64le","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"System and Service Manager","version":"239"}],"_links":{"image":{"href":"/v1/images/id/5cc9ca42dd19c7782937e032"}}} +-- catalog.redhat.com/api/containers/v1/images/id/5cc9ca44dd19c7782937e03e/rpm-manifest -- +{"_id":"5cc9ca45dd19c7782937e044","creation_date":"2019-05-01T16:33:09.438000+00:00","image_id":"5cc9ca44dd19c7782937e03e","last_update_date":"2024-09-06T10:10:06.557000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.1.1-4.el8.s390x","release":"4.el8","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.1.1-4.el8.src","summary":"Extended crypt library for DES, MD5, Blowfish and others","version":"4.1.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.1-6.el8.s390x","release":"6.el8","srpm_name":"grep","srpm_nevra":"grep-0:3.1-6.el8.src","summary":"Pattern matching utilities","version":"3.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.3.4-10.el8.s390x","release":"10.el8","srpm_name":"lua","srpm_nevra":"lua-0:5.3.4-10.el8.src","summary":"Libraries for lua","version":"5.3.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-10.el8.s390x","release":"10.el8","srpm_name":"which","srpm_nevra":"which-0:2.21-10.el8.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.9-4.el8.s390x","release":"4.el8","srpm_name":"gzip","srpm_nevra":"gzip-0:1.9-4.el8.src","summary":"The GNU data compression program","version":"1.9"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.6-26.el8.s390x","release":"26.el8","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.6-26.el8.src","summary":"Libraries for applications using bzip2","version":"1.0.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.5-1.el8.s390x","release":"1.el8","srpm_name":"sed","srpm_nevra":"sed-0:4.5-1.el8.src","summary":"A GNU stream text editor","version":"4.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.30-4.el8.s390x","release":"4.el8","srpm_name":"tar","srpm_nevra":"tar-2:1.30-4.el8.src","summary":"A GNU file archiving program","version":"1.30"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-4.2.1-1.el8.s390x","release":"1.el8","srpm_name":"gawk","srpm_nevra":"gawk-0:4.2.1-1.el8.src","summary":"The GNU version of the AWK text processing utility","version":"4.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-5.el8.noarch","release":"5.el8","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-5.el8.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.2.53-1.el8.s390x","release":"1.el8","srpm_name":"acl","srpm_nevra":"acl-0:2.2.53-1.el8.src","summary":"Dynamic library for access control list support","version":"2.2.53"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.2.53-1.el8.s390x","release":"1.el8","srpm_name":"acl","srpm_nevra":"acl-0:2.2.53-1.el8.src","summary":"Access control list utilities","version":"2.2.53"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.4.48-3.el8.s390x","release":"3.el8","srpm_name":"attr","srpm_nevra":"attr-0:2.4.48-3.el8.src","summary":"Dynamic library for extended attribute support","version":"2.4.48"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-0.3rc7.el8.s390x","release":"0.3rc7.el8","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-0.3rc7.el8.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus-glib","nvra":"dbus-glib-0.110-2.el8.s390x","release":"2.el8","srpm_name":"dbus-glib","srpm_nevra":"dbus-glib-0:0.110-2.el8.src","summary":"GLib bindings for D-Bus","version":"0.110"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.4-14.el8.s390x","release":"14.el8","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.4-14.el8.src","summary":"D-Bus bindings for python3","version":"1.2.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.8-2.el8.s390x","release":"2.el8","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.8-2.el8.src","summary":"The basic directory layout for a Linux system","version":"3.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.5-3.el8.s390x","release":"3.el8","srpm_name":"expat","srpm_nevra":"expat-0:2.2.5-3.el8.src","summary":"An XML parser library","version":"2.2.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.7-5.el8.s390x","release":"5.el8","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.7-5.el8.src","summary":"Library providing XML and HTML support","version":"2.9.7"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.1.2-8.el8.s390x","release":"8.el8","srpm_name":"gmp","srpm_nevra":"gmp-1:6.1.2-8.el8.src","summary":"A GNU arbitrary precision library","version":"6.1.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.2.1-2.el8.noarch","release":"2.el8","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.2.1-2.el8.src","summary":"Module to simplify usage of decorators in python3","version":"4.2.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.56.1-1.el8.s390x","release":"1.el8","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.56.1-1.el8.src","summary":"Introspection system for GObject-based libraries","version":"1.56.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-1.0-12.el8.noarch","release":"12.el8","srpm_name":"langpacks","srpm_nevra":"langpacks-0:1.0-12.el8.src","summary":"English langpacks meta-package","version":"1.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.6.1-6.el8.noarch","release":"6.el8","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.6.1-6.el8.src","summary":"Powerful extensions to the standard datetime module","version":"2.6.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.2.9-1.el8.s390x","release":"1.el8","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.2.9-1.el8.src","summary":"Utility for secure communication and data storage","version":"2.2.9"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-31.el8.noarch","release":"31.el8","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-31.el8.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.13.1-0.2.el8.s390x","release":"0.2.el8","srpm_name":"json-c","srpm_nevra":"json-c-0:0.13.1-0.2.el8.src","summary":"JSON implementation in C","version":"0.13.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.5.10-6.el8.s390x","release":"6.el8","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.5.10-6.el8.src","summary":"Key utilities library","version":"1.5.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.1-3.el8.s390x","release":"3.el8","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.1-3.el8.src","summary":"GnuPG IPC library","version":"2.5.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.25-9.el8.s390x","release":"9.el8","srpm_name":"libcap","srpm_nevra":"libcap-0:2.25-9.el8.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.25"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.31-1.el8.s390x","release":"1.el8","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.31-1.el8.src","summary":"Library for error values used by GnuPG components","version":"1.31"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.8.3-2.el8.s390x","release":"2.el8","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.8.3-2.el8.src","summary":"A general-purpose cryptography library","version":"1.8.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.0.5-1.el8.s390x","release":"1.el8","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.0.5-1.el8.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.0.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libmetalink","nvra":"libmetalink-0.1.3-7.el8.s390x","release":"7.el8","srpm_name":"libmetalink","srpm_nevra":"libmetalink-0:0.1.3-7.el8.src","summary":"Metalink library written in C","version":"0.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.3.5-7.el8.s390x","release":"7.el8","srpm_name":"libksba","srpm_nevra":"libksba-0:1.3.5-7.el8.src","summary":"CMS and X.509 library","version":"1.3.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.3.2-3.el8.s390x","release":"3.el8","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.3.2-3.el8.src","summary":"A library for handling streaming archive formats","version":"3.3.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libnsl2","nvra":"libnsl2-1.2.0-2.20180605git4a062cf.el8.s390x","release":"2.20180605git4a062cf.el8","srpm_name":"libnsl2","srpm_nevra":"libnsl2-0:1.2.0-2.20180605git4a062cf.el8.src","summary":"Public client interface library for NIS(YP) and NIS+","version":"1.2.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.4.0-4.el8.s390x","release":"4.el8","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.4.0-4.el8.src","summary":"Convenience library for kernel netlink sockets","version":"3.4.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libpsl","nvra":"libpsl-0.20.2-5.el8.s390x","release":"5.el8","srpm_name":"libpsl","srpm_nevra":"libpsl-0:0.20.2-5.el8.src","summary":"C library for the Publix Suffix List","version":"0.20.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libpcap","nvra":"libpcap-1.9.0-1.el8.s390x","release":"1.el8","srpm_name":"libpcap","srpm_nevra":"libpcap-14:1.9.0-1.el8.src","summary":"A system-independent interface for user-level packet capture","version":"1.9.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.11-5.el8.s390x","release":"5.el8","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.11-5.el8.src","summary":"Library for handling page faults in user mode","version":"2.11"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.3.3-3.el8.s390x","release":"3.el8","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.3.3-3.el8.src","summary":"Enhanced seccomp library","version":"2.3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.13-3.el8.s390x","release":"3.el8","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.13-3.el8.src","summary":"The ASN.1 library used in GNUTLS","version":"4.13"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.1.6-14.el8.s390x","release":"14.el8","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.1.6-14.el8.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.1.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.0-5.el8.s390x","release":"5.el8","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.0-5.el8.src","summary":"Main loop abstraction library","version":"0.3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.11.0-8.el8.noarch","release":"8.el8","srpm_name":"python-six","srpm_nevra":"python-six-0:1.11.0-8.el8.src","summary":"Python 2 and 3 compatibility utilities","version":"1.11.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.1.7-5.el8.s390x","release":"5.el8","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.1.7-5.el8.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.1.7"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.8.1.2-4.el8.s390x","release":"4.el8","srpm_name":"lz4","srpm_nevra":"lz4-0:1.8.1.2-4.el8.src","summary":"Libaries for lz4","version":"1.8.1.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-3.1.6-1.el8.s390x","release":"1.el8","srpm_name":"mpfr","srpm_nevra":"mpfr-0:3.1.6-1.el8.src","summary":"A C library for multiple-precision floating-point computations","version":"3.1.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.5-4.el8.s390x","release":"4.el8","srpm_name":"npth","srpm_nevra":"npth-0:1.5-4.el8.src","summary":"The New GNU Portable Threads library","version":"1.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"publicsuffix-list-dafsa","nvra":"publicsuffix-list-dafsa-20180723-1.el8.noarch","release":"1.el8","srpm_name":"publicsuffix-list","srpm_nevra":"publicsuffix-list-0:20180723-1.el8.src","summary":"Cross-vendor public domain suffix database in DAFSA form","version":"20180723"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-2.el8.s390x","release":"2.el8","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-2.el8.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-10.el8.s390x","release":"10.el8","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-10.el8.src","summary":"The compression and decompression library","version":"1.2.11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pkgconf-m4","nvra":"pkgconf-m4-1.4.2-1.el8.noarch","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"m4 macros for pkgconf","version":"1.4.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pkgconf","nvra":"pkgconf-1.4.2-1.el8.s390x","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"Package compiler and linker metadata toolkit","version":"1.4.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pkgconf-pkg-config","nvra":"pkgconf-pkg-config-1.4.2-1.el8.s390x","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"pkgconf shim to provide /usr/bin/pkg-config","version":"1.4.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libpkgconf","nvra":"libpkgconf-1.4.2-1.el8.s390x","release":"1.el8","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.4.2-1.el8.src","summary":"Backend library for pkgconf","version":"1.4.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.16-14.el8.s390x","release":"14.el8","srpm_name":"popt","srpm_nevra":"popt-0:1.16-14.el8.src","summary":"C library for parsing command line parameters","version":"1.16"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.28.3-1.el8.s390x","release":"1.el8","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.28.3-1.el8.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.28.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-7.0-10.el8.s390x","release":"10.el8","srpm_name":"readline","srpm_nevra":"readline-0:7.0-10.el8.src","summary":"A library for editing typed command lines","version":"7.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2018.2.24-6.el8.noarch","release":"6.el8","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2018.2.24-6.el8.src","summary":"The Mozilla CA root certificate bundle","version":"2018.2.24"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.9-3.el8.s390x","release":"3.el8","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.9-3.el8.src","summary":"GNU Unicode string library","version":"0.9.9"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libusbx","nvra":"libusbx-1.0.22-1.el8.s390x","release":"1.el8","srpm_name":"libusbx","srpm_nevra":"libusbx-0:1.0.22-1.el8.src","summary":"Library for accessing USB devices","version":"1.0.22"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.9.5-6.el8.s390x","release":"6.el8","srpm_name":"libreport","srpm_nevra":"libreport-0:2.9.5-6.el8.src","summary":"Filesystem layout for libreport","version":"2.9.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.42-4.el8.s390x","release":"4.el8","srpm_name":"pcre","srpm_nevra":"pcre-0:8.42-4.el8.src","summary":"Perl-compatible regular expression library","version":"8.42"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.12.2-1.el8.noarch","release":"1.el8","srpm_name":"setup","srpm_nevra":"setup-0:2.12.2-1.el8.src","summary":"A set of system configuration and setup files","version":"2.12.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"chkconfig","nvra":"chkconfig-1.11-1.el8.s390x","release":"1.el8","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.11-1.el8.src","summary":"A system tool for maintaining the /etc/rc*.d hierarchy","version":"1.11"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.9.2-1.el8.s390x","release":"1.el8","srpm_name":"librepo","srpm_nevra":"librepo-0:1.9.2-1.el8.src","summary":"Repodata downloading library","version":"1.9.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.9.2-1.el8.s390x","release":"1.el8","srpm_name":"librepo","srpm_nevra":"librepo-0:1.9.2-1.el8.src","summary":"Python 3 bindings for the librepo library","version":"1.9.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.18-1.el8.s390x","release":"1.el8","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.18-1.el8.src","summary":"Libraries files for gdbm","version":"1.18"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gdbm","nvra":"gdbm-1.18-1.el8.s390x","release":"1.el8","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.18-1.el8.src","summary":"A GNU set of database routines which use extensible hashing","version":"1.18"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libtirpc","nvra":"libtirpc-1.1.4-3.el8.s390x","release":"3.el8","srpm_name":"libtirpc","srpm_nevra":"libtirpc-0:1.1.4-3.el8.src","summary":"Transport Independent RPC Library","version":"1.1.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"info","nvra":"info-6.5-4.el8.s390x","release":"4.el8","srpm_name":"texinfo","srpm_nevra":"texinfo-0:6.5-4.el8.src","summary":"A stand-alone TTY-based reader for GNU texinfo documentation","version":"6.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.33.0-1.el8.s390x","release":"1.el8","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.33.0-1.el8.src","summary":"A library implementing the HTTP/2 protocol","version":"1.33.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"brotli","nvra":"brotli-1.0.6-1.el8.s390x","release":"1.el8","srpm_name":"brotli","srpm_nevra":"brotli-0:1.0.6-1.el8.src","summary":"Lossless compression algorithm","version":"1.0.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.4.4-1.el8.s390x","release":"1.el8","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.4.4-1.el8.src","summary":"Library for JavaScript Object Notation format","version":"1.4.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.0-9.el8.s390x","release":"9.el8","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.0-9.el8.src","summary":"A library for password generation and password quality checking","version":"1.4.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.8-7.el8.noarch","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus configuration","version":"1.12.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus-daemon","nvra":"dbus-daemon-1.12.8-7.el8.s390x","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus","version":"1.12.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus-tools","nvra":"dbus-tools-1.12.8-7.el8.s390x","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS Tools and Utilities","version":"1.12.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.8-7.el8.s390x","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"D-BUS message bus","version":"1.12.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.8-7.el8.s390x","release":"7.el8","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.8-7.el8.src","summary":"Libraries for accessing D-BUS","version":"1.12.8"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"platform-python-setuptools","nvra":"platform-python-setuptools-39.2.0-4.el8.noarch","release":"4.el8","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:39.2.0-4.el8.src","summary":"Easily build and distribute Python 3 packages","version":"39.2.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.1-4.el8.s390x","release":"4.el8","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.1-4.el8.src","summary":"IMA/EVM support utilities","version":"1.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.18-6.el8.s390x","release":"6.el8","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.18-6.el8.src","summary":"Detect if we are running in a virtual machine","version":"1.18"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.6.0-20.el8.s390x","release":"20.el8","srpm_name":"findutils","srpm_nevra":"findutils-1:4.6.0-20.el8.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.6.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.33-8.el8.s390x","release":"8.el8","srpm_name":"file","srpm_nevra":"file-0:5.33-8.el8.src","summary":"Libraries for applications using libmagic","version":"5.33"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-2.8-2.el8.s390x","release":"2.el8","srpm_name":"libsepol","srpm_nevra":"libsepol-0:2.8-2.el8.src","summary":"SELinux binary policy manipulation library","version":"2.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-2.8-6.el8.s390x","release":"6.el8","srpm_name":"libselinux","srpm_nevra":"libselinux-0:2.8-6.el8.src","summary":"SELinux library and simple utilities","version":"2.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-2.el8.s390x","release":"2.el8","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-2.el8.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-13.el8.noarch","release":"13.el8","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-13.el8.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.113-1.el8.s390x","release":"1.el8","srpm_name":"usermode","srpm_nevra":"usermode-0:1.113-1.el8.src","summary":"Tools for certain user account management tasks","version":"1.113"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.10.0-6.el8.s390x","release":"6.el8","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.10.0-6.el8.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.10.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.10.0-6.el8.s390x","release":"6.el8","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.10.0-6.el8.src","summary":"gpgme bindings for Python 3","version":"1.10.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.4-3.el8.s390x","release":"3.el8","srpm_name":"xz","srpm_nevra":"xz-0:5.2.4-3.el8.src","summary":"Libraries for decoding LZMA compression","version":"5.2.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-15.el8.s390x","release":"15.el8","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-15.el8.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.1-18.el8.s390x","release":"18.el8","srpm_name":"libffi","srpm_nevra":"libffi-0:3.1-18.el8.src","summary":"A portable foreign function interface library","version":"3.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.62-21.el8.s390x","release":"21.el8","srpm_name":"libuser","srpm_nevra":"libuser-0:0.62-21.el8.src","summary":"A user and group account administration library","version":"0.62"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.0.6-1.el8.s390x","release":"1.el8","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.0.6-1.el8.src","summary":"Cryptsetup shared library","version":"2.0.6"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.174-6.el8.noarch","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Default yama attach scope sysctl setting","version":"0.174"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.174-6.el8.s390x","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Library to read and write ELF files","version":"0.174"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.174-6.el8.s390x","release":"6.el8","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.174-6.el8.src","summary":"Libraries to handle compiled objects","version":"0.174"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.0.1763-10.el8.s390x","release":"10.el8","srpm_name":"vim","srpm_nevra":"vim-2:8.0.1763-10.el8.src","summary":"A minimal version of the VIM editor","version":"8.0.1763"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-2.8-5.el8.s390x","release":"5.el8","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:2.8-5.el8.src","summary":"SELinux binary policy manipulation library","version":"2.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.3.1-4.el8.s390x","release":"4.el8","srpm_name":"pam","srpm_nevra":"pam-0:1.3.1-4.el8.src","summary":"An extensible library which provides authentication for applications","version":"1.3.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.14-3.el8.s390x","release":"3.el8","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.14-3.el8.src","summary":"Python module to interface with ethtool","version":"0.14"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-8.2.1-3.5.el8.s390x","release":"3.5.el8","srpm_name":"gcc","srpm_nevra":"gcc-0:8.2.1-3.5.el8.src","summary":"GCC version 8 shared support library","version":"8.2.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-8.2.1-3.5.el8.s390x","release":"3.5.el8","srpm_name":"gcc","srpm_nevra":"gcc-0:8.2.1-3.5.el8.src","summary":"GNU Standard C++ Library","version":"8.2.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.32.1-8.el8.s390x","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Universally unique ID library","version":"2.32.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.32.1-8.el8.s390x","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"A collection of basic system utilities","version":"2.32.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.32.1-8.el8.s390x","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Partitioning library for fdisk-like programs.","version":"2.32.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.32.1-8.el8.s390x","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Block device ID library","version":"2.32.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.32.1-8.el8.s390x","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Device mounting library","version":"2.32.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.32.1-8.el8.s390x","release":"8.el8","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.32.1-8.el8.src","summary":"Formatting library for ls-like programs.","version":"2.32.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.4.1-1.el8.s390x","release":"1.el8","srpm_name":"nettle","srpm_nevra":"nettle-0:3.4.1-1.el8.src","summary":"A low-level cryptographic library","version":"3.4.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.8-13.el8.s390x","release":"13.el8","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.8-13.el8.src","summary":"Python 3 bindings for libcomps library","version":"0.1.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.8-13.el8.s390x","release":"13.el8","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.8-13.el8.src","summary":"Comps XML file manipulation library","version":"0.1.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-1.1.1-8.el8.s390x","release":"8.el8","srpm_name":"openssl","srpm_nevra":"openssl-1:1.1.1-8.el8.src","summary":"A general purpose cryptography library with TLS implementation","version":"1.1.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.32-1.el8.s390x","release":"1.el8","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.32-1.el8.src","summary":"Perl-compatible regular expression library","version":"10.32"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libssh","nvra":"libssh-0.8.5-2.el8.s390x","release":"2.el8","srpm_name":"libssh","srpm_nevra":"libssh-0:0.8.5-2.el8.src","summary":"A library implementing the SSH protocol","version":"0.8.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"platform-python-pip","nvra":"platform-python-pip-9.0.3-13.el8.noarch","release":"13.el8","srpm_name":"python-pip","srpm_nevra":"python-pip-0:9.0.3-13.el8.src","summary":"A tool for installing and managing Python3 packages","version":"9.0.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.44.3-2.el8.s390x","release":"2.el8","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.44.3-2.el8.src","summary":"Common error description library","version":"1.44.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.46-9.el8.s390x","release":"9.el8","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.46-9.el8.src","summary":"LDAP support libraries","version":"2.4.46"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.6-7.el8.s390x","release":"7.el8","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.6-7.el8.src","summary":"Utilities for managing accounts and shadow password files","version":"4.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.14.2-9.el8.s390x","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Libraries for building and signing RPM packages","version":"4.14.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.14.2-9.el8.s390x","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Libraries for manipulating RPM packages","version":"4.14.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.14.2-9.el8.s390x","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"The RPM package management system","version":"4.14.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.14.2-9.el8.s390x","release":"9.el8","srpm_name":"rpm","srpm_nevra":"rpm-0:4.14.2-9.el8.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.14.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.26.0-3.el8.s390x","release":"3.el8","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.26.0-3.el8.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.26.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.2.2-3.el8.noarch","release":"3.el8","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.2.2-3.el8.src","summary":"Core Plugins for DNF","version":"4.0.2.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.7.9-4.el8.s390x","release":"4.el8","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.7.9-4.el8.src","summary":"An alternate posix capabilities library","version":"0.7.9"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0-0.10.20180831git0047a6c.el8.s390x","release":"0.10.20180831git0047a6c.el8","srpm_name":"audit","srpm_nevra":"audit-0:3.0-0.10.20180831git0047a6c.el8.src","summary":"Dynamic library for libaudit","version":"3.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcurl","nvra":"libcurl-7.61.1-8.el8.s390x","release":"8.el8","srpm_name":"curl","srpm_nevra":"curl-0:7.61.1-8.el8.src","summary":"A library for getting files from web servers","version":"7.61.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"curl","nvra":"curl-7.61.1-8.el8.s390x","release":"8.el8","srpm_name":"curl","srpm_nevra":"curl-0:7.61.1-8.el8.src","summary":"A utility for getting files from remote servers (FTP, HTTP, and others)","version":"7.61.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.6.5-2.el8.s390x","release":"2.el8","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.6.5-2.el8.src","summary":"A TLS protocol implementation","version":"3.6.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.30-6.el8.s390x","release":"6.el8","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.30-6.el8.src","summary":"coreutils multicall binary","version":"8.30"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-8.2-5.el8.s390x","release":"5.el8","srpm_name":"gdb","srpm_nevra":"gdb-0:8.2-5.el8.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"8.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-4.4.19-7.el8.s390x","release":"7.el8","srpm_name":"bash","srpm_nevra":"bash-0:4.4.19-7.el8.src","summary":"The GNU Bourne Again shell","version":"4.4.19"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.56.4-1.el8.s390x","release":"1.el8","srpm_name":"glib2","srpm_nevra":"glib2-0:2.56.4-1.el8.src","summary":"A library of handy utility functions","version":"2.56.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.1-7.20180224.el8.noarch","release":"7.20180224.el8","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.1-7.20180224.el8.src","summary":"Descriptions of common terminals","version":"6.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.1-7.20180224.el8.s390x","release":"7.20180224.el8","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.1-7.20180224.el8.src","summary":"Ncurses libraries","version":"6.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libmodulemd1","nvra":"libmodulemd1-1.8.0-5.el8.s390x","release":"5.el8","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.0.0-5.el8.src","summary":"Compatibility package for libmodulemd 1.x","version":"1.8.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libdb-utils","nvra":"libdb-utils-5.3.28-36.el8.s390x","release":"36.el8","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-36.el8.src","summary":"Command line tools for managing Berkeley DB databases","version":"5.3.28"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-36.el8.s390x","release":"36.el8","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-36.el8.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.16.1-22.el8.s390x","release":"22.el8","srpm_name":"krb5","srpm_nevra":"krb5-0:1.16.1-22.el8.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.16.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.6.35-6.el8.s390x","release":"6.el8","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.6.35-6.el8.src","summary":"Package dependency solver","version":"0.6.35"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"iptables-libs","nvra":"iptables-libs-1.8.2-9.el8.s390x","release":"9.el8","srpm_name":"iptables","srpm_nevra":"iptables-0:1.8.2-9.el8.src","summary":"iptables libraries","version":"1.8.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Package manager","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Common data and configuration files for DNF","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Python 3 interface to DNF","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.0.9.2-5.el8.noarch","release":"5.el8","srpm_name":"dnf","srpm_nevra":"dnf-0:4.0.9.2-5.el8.src","summary":"Package manager","version":"4.0.9.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20181217-6.git9a35207.el8.noarch","release":"6.git9a35207.el8","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20181217-6.git9a35207.el8.src","summary":"Systemwide crypto policies","version":"20181217"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.155-6.el8.s390x","release":"6.el8","srpm_name":"lvm2","srpm_nevra":"lvm2-8:2.03.02-6.el8.src","summary":"Device mapper utility","version":"1.02.155"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.155-6.el8.s390x","release":"6.el8","srpm_name":"lvm2","srpm_nevra":"lvm2-8:2.03.02-6.el8.src","summary":"Device-mapper shared library","version":"1.02.155"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-8.0-0.44.el8.s390x","release":"0.44.el8","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:8.0-0.44.el8.src","summary":"Red Hat Enterprise Linux release file","version":"8.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.23.8-35.el8.s390x","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Tools and libraries for subscription and repository management","version":"1.23.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dnf-plugin-subscription-manager","nvra":"dnf-plugin-subscription-manager-1.23.8-35.el8.s390x","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Subscription Manager plugins for DNF","version":"1.23.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.23.8-35.el8.s390x","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.23.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-syspurpose","nvra":"python3-syspurpose-1.23.8-35.el8.s390x","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"A commandline utility for declaring system syspurpose","version":"1.23.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.23.8-35.el8.s390x","release":"35.el8","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.23.8-35.el8.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.23.8"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2019a-1.el8.noarch","release":"1.el8","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2019a-1.el8.src","summary":"Timezone data","version":"2019a"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.23.14-5.el8_0.s390x","release":"5.el8_0","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.23.14-5.el8_0.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.23.14"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.23.14-5.el8_0.s390x","release":"5.el8_0","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.23.14-5.el8_0.src","summary":"System trust module from p11-kit","version":"0.23.14"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.28-42.el8_0.1.s390x","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"Common binaries and locale data for glibc","version":"2.28"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.28-42.el8_0.1.s390x","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"Minimal language packs for glibc.","version":"2.28"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.28-42.el8_0.1.s390x","release":"42.el8_0.1","srpm_name":"glibc","srpm_nevra":"glibc-0:2.28-42.el8_0.1.src","summary":"The GNU libc libraries","version":"2.28"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.22.5-5.el8_0.s390x","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.22.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.22.5-5.el8_0.s390x","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.22.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.22.5-5.el8_0.s390x","release":"5.el8_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.22.5-5.el8_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.22.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-25-11.el8_0.2.s390x","release":"11.el8_0.2","srpm_name":"kmod","srpm_nevra":"kmod-0:25-11.el8_0.2.src","summary":"Libraries to handle kernel module loading and unloading","version":"25"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.6.8-2.el8_0.s390x","release":"2.el8_0","srpm_name":"python3","srpm_nevra":"python3-0:3.6.8-2.el8_0.src","summary":"Python runtime libraries","version":"3.6.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"platform-python","nvra":"platform-python-3.6.8-2.el8_0.s390x","release":"2.el8_0","srpm_name":"python3","srpm_nevra":"python3-0:3.6.8-2.el8_0.src","summary":"Internal interpreter of the Python programming language","version":"3.6.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-239-13.el8_0.3.s390x","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"System and Service Manager","version":"239"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-239-13.el8_0.3.s390x","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"systemd libraries","version":"239"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-239-13.el8_0.3.s390x","release":"13.el8_0.3","srpm_name":"systemd","srpm_nevra":"systemd-0:239-13.el8_0.3.src","summary":"systemd PAM module","version":"239"}],"_links":{"image":{"href":"/v1/images/id/5cc9ca44dd19c7782937e03e"}}} diff --git a/rhel/testdata/package/ubi9_httpd-24.txtar b/rhel/testdata/package/ubi9_httpd-24.txtar new file mode 100644 index 000000000..2dd3f0677 --- /dev/null +++ b/rhel/testdata/package/ubi9_httpd-24.txtar @@ -0,0 +1,26 @@ +Generator: fetch-container-rpm-manifest +Version: (devel) +Created: 2025-05-13T15:03:42-05:00 +Search-Term: repository:ubi9/httpd-24 +Url: https://access.redhat.com/hydra/rest/search/kcs?fl=id%2Crepository%2Cregistry%2Cparsed_data_layers&fq=documentKind%3A%22ContainerRepository%22&fq=-eol_date%3A%5B%2A+TO+NOW%5D&fq=repository%3Aubi9%2Fhttpd-24&q=%2A&redhat_client=claircore%2Ffetch-container-rpm-manifest&rows=10 +Url: https://catalog.redhat.com/api/containers/v1/repositories/id/61a60c3e3e9240fca360f74a +Url: https://catalog.redhat.com/api/containers/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/httpd-24/images?exclude=data.brew%2Cdata.certified%2Cdata.container_grades%2Cdata.content_sets%2Cdata.cpe_ids%2Cdata.docker_image_id%2Cdata.freshness_grades%2Cdata.parsed_data.command%2Cdata.parsed_data.comment%2Cdata.parsed_data.docker_version%2Cdata.parsed_data.env_variables%2Cdata.parsed_data.labels%2Cdata.parsed_data.ports%2Cdata.parsed_data.size%2Cdata.parsed_data.uncompressed_size_bytes%2Cdata.parsed_data.user%2Cdata.raw_config%2Cdata.repositories%2Cdata.sum_layer_size_bytes%2Cdata.top_layer_id%2Cdata.uncompressed_top_layer_id&filter=deleted%21%3Dtrue&page=0&page_size=6&sort_by=creation_date%5Basc%5D +Url: https://catalog.redhat.com/api/containers/v1/images/id/6272a08c4841f16f4f118c5c/rpm-manifest +Url: https://catalog.redhat.com/api/containers/v1/images/id/6272a08f4841f16f4f118c60/rpm-manifest +Url: https://catalog.redhat.com/api/containers/v1/images/id/6272a0924841f16f4f118c66/rpm-manifest +Url: https://catalog.redhat.com/api/containers/v1/images/id/6272a0954841f16f4f118c6a/rpm-manifest + +-- access.redhat.com/hydra/rest/search/kcs -- +{"spellcheck":{"collations":[],"suggestions":[]},"response":{"docs":[{"parsed_data_layers":["sha256:5741b6a86ae0ad6db4fe34b04f060787e82f7a7c3d0a2fe24de05ec0e6aa2c88","sha256:29afda33dcdfc3ac6d0fdb21505a42271b92572ccfab6e5c5a0ea333b48c7ee6","sha256:99814ff0874a99ca8fdc4d488a2c9ede239356628b3a84decfb86fa866af785c"],"registry":"registry.access.redhat.com","id":"61a60c3e3e9240fca360f74a","repository":"ubi9/httpd-24"}],"numFound":1,"start":0,"maxScore":2,"numFoundExact":true},"responseHeader":{"QTime":35,"zkConnected":true,"params":{"ps":"3","bf":"if(exists(pulls_in_last_30_days),sqrt(log(map(pulls_in_last_30_days,0,0,1))),1)","fl":"id,repository,registry,parsed_data_layers","q.op":"AND","fq":["documentKind:\"ContainerRepository\"","-eol_date:[* TO NOW]","repository:ubi9/httpd-24"," -documentKind:( ApplicationAttribute )","-accessState:(private OR retired) AND -hasPublishedRevision:false","-doNotDisplay:true"],"isAuthenticated":"false","ps2":"3","q.orig":"*","ps3":"3","defType":"edismax","spellcheck.q":"*","trace":["host: restprod04","method: GET","uri: /rs/search","route: portal","collection: access"],"redhat_client":"claircore/fetch-container-rpm-manifest","qf":"psfa^10.0 psfb^5.5 psfc^4.5 psfd^3.5 psfe^4.0 psff^2.5 psfg^2.0","matchtype":"exact","hl.fl":"abstract","wt":"json","mm":"0","start":"0","sort":"score desc,id asc","rows":"10","reqId":"ID-hydra-search-api-prod-57-djshx-1747148834692-0-114310","isInternal":"false","q":"*","enableElevation":"true","spellcheck":"true","pf":"psfa^12.0 psfb^5.0 psfc^4.0 psfd^3.5 psfe^4.0 psff^2.5 psfg^2.0","boost":["map(query({!field f='view_uri' v='https://access.redhat.com/downloads/content/package-browser'}), 0, 0, 1, 260.64342)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/8409'}), 0, 0, 1, 124.98317)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/914003'}), 0, 0, 1, 122.75514)","map(query({!field f='view_uri' v='https://access.redhat.com/solutions/29036'}), 0, 0, 1, 121.28655)","map(query({!field f='view_uri' v='https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/considerations_in_adopting_rhel_9/'}), 0, 0, 1, 105.7091)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/1378093'}), 0, 0, 1, 82.3566)","map(query({!field f='view_uri' v='https://access.redhat.com/solutions/4078831'}), 0, 0, 1, 79.10734)","map(query({!field f='view_uri' v='https://access.redhat.com/discussions/4311201'}), 0, 0, 1, 63.29097)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/simple-content-access'}), 0, 0, 1, 60.65626)","map(query({!field f='view_uri' v='https://access.redhat.com/solutions/17215'}), 0, 0, 1, 58.7909)"],"showRetired":"false","pf3":"psfa^7.0 psfb^3.0 psfc^3.5 psfd^2.5 psfe^2.5 psff^1.0 psfg^1.0","pf2":"psfa^2.0 psfb^1.5 psfc^1.0 psfd^1.0 psfe^1.5 psff^1.0 psfg^1.0"},"status":0}} +-- catalog.redhat.com/api/containers/v1/repositories/id/61a60c3e3e9240fca360f74a -- +{"_id":"61a60c3e3e9240fca360f74a","application_categories":["Programming Languages & Runtimes"],"auto_rebuild_tags":[],"build_categories":["Builder image"],"can_auto_release_cve_rebuild":false,"content_stream_grades":[{"grade":"A","image_ids":[{"arch":"amd64","id":"6811ed5934db2eef54d303af"},{"arch":"arm64","id":"6811ed7187e6041475183208"},{"arch":"s390x","id":"6811ed901262d0c8c55d5a38"},{"arch":"ppc64le","id":"6811eda5f254c8a343814afd"}],"tag":"latest"}],"content_stream_tags":["latest"],"creation_date":"2021-11-30T11:34:22.640000+00:00","display_data":{"long_description":"

Apache HTTP Server 2.4 available as container, is a powerful, efficient, and extensible web server. Apache supports a variety of features, many implemented as compiled modules which extend the core functionality. These can range from server-side programming language support to authentication schemes. Virtual hosting allows one Apache installation to serve many different Web sites."

Usage in OpenShift

In this example, we assume that you are using the ubi9/httpd-24 image, available through the httpd:24 imagestream tag in Openshift. To build a simple httpd-sample-app application in Openshift:

oc new-app httpd:24~https://github.com/sclorg/httpd-ex.git

To access the application:

$ oc get pods
$ oc exec <pod> -- curl 127.0.0.1:8080

Source-to-Image framework and scripts

This image supports the Source-to-Image (S2I) strategy in OpenShift. The Source-to-Image is an OpenShift framework which makes it easy to write images that take application source code as an input, use a builder image like this httpd container image, and produce a new image that runs the assembled application as an output.

To support the Source-to-Image framework, important scripts are included in the builder image:

  • The /usr/libexec/s2i/run script is set as the default command in the resulting container image (the new image with the application artifacts).

  • The /usr/libexec/s2i/assemble script inside the image is run to produce a new image with the application artifacts. The script takes sources of a given application and places them into appropriate directories inside the image. The structure of httpd-app can look like this:

./httpd-cfg
Can contain additional Apache configuration files (*.conf)

./httpd-pre-init
Can contain shell scripts (*.sh) that are sourced before httpd is started

./httpd-ssl
Can contain user's own SSL certificate (in the certs/ subdirectory) and a key (in the private/ subdirectory)

./
Application source code

Build an application using a Dockerfile

Compared to the Source-to-Image strategy, using a Dockerfile is a more flexible way to build an httpd container image with an application. Use a Dockerfile when Source-to-Image is not sufficiently flexible for you or when you build the image outside of the OpenShift environment.

To use the httpd image in a Dockerfile, follow these steps:

1. Pull a base builder image to build on

podman pull ubi9/httpd-24

2. Pull an application code

An example application available at https://github.com/sclorg/httpd-ex.git is used here. To adjust the example application, clone the repository.

git clone https://github.com/sclorg/httpd-ex.git app-src

3. Prepare an application inside a container

This step usually consists of at least these parts:

  • putting the application source into the container
  • moving certificates to the correct place (if available in the application source code)
  • setting the default command in the resulting image

For all these three parts, you can either set up all manually and use the httpd or run-httpd commands explicitly in the Dockerfile (3.1.), or you can use the Source-to-Image scripts inside the image (3.2.. For more information about these scripts, which enable you to set-up and run the httpd daemon, see the "Source-to-Image framework and scripts" section above.

3.1. To use your own setup, create a Dockerfile with this content:
FROM registry.redhat.io/ubi9/httpd-24

# Add application sources
ADD app-src/index.html /var/www/html/index.html

# The run script uses standard ways to run the application
CMD run-httpd
3.2. To use the Source-to-Image scripts and build an image using a Dockerfile, create a Dockerfile with this content:
FROM registry.redhat.io/ubi9/httpd-24

# Add application sources to a directory where the assemble script expects them
# and set permissions so that the container runs without the root access
USER 0
ADD app-src/index.html /tmp/src/index.html
RUN chown -R 1001:0 /tmp/src
USER 1001

# Let the assemble script install the dependencies
RUN /usr/libexec/s2i/assemble

# The run script uses standard ways to run the application
CMD /usr/libexec/s2i/run

4. Build a new image from a Dockerfile prepared in the previous step

podman build -t httpd-app .

5. Run the resulting image with the final application

podman run -d httpd-app

Direct usage with a mounted directory

An example of the data on the host for both the examples above, which is served by The Apache HTTP web server:

$ ls -lZ /wwwdata/html
-rw-r--r--. 1 1001 1001 54321 Jan 01 12:34 index.html
-rw-r--r--. 1 1001 1001  5678 Jan 01 12:34 page.html

If you want to run the image directly and mount the static pages available in the /wwwdata/ directory on the host as a container volume, execute the following command:

$ podman run -d --name httpd -p 8080:8080 -v /wwwdata:/var/www:Z ubi9/httpd-24

This creates a container named httpd running the Apache HTTP Server, serving data from the /wwwdata/ directory. Port 8080 is exposed and mapped to the host.

Environment variables and volumes

The Apache HTTP Server container image supports the following configuration variable, which can be set by using the -e option with the podman run command:

HTTPD_LOG_TO_VOLUME
By default, httpd logs into standard output, so the logs are accessible by using the podman logs command. When HTTPD_LOG_TO_VOLUME is set, httpd logs into /var/log/httpd24, which can be mounted to host system using the container volumes. This option is only allowed when container is run as UID 0.

HTTPD_MPM The variable HTTPD_MPM can be set to change the default Multi-Processing Module (MPM) from the package default MPM.

If you want to run the image and mount the log files into /wwwlogs on the host as a container volume, execute the following command:

$ podman run -d -u 0 -e HTTPD_LOG_TO_VOLUME=1 --name httpd -v /wwwlogs:/var/log/httpd24:Z ubi9/httpd-24

To run an image using the event MPM (rather than the default prefork), execute the following command:

$ podman run -d -e HTTPD_MPM=event --name httpd ubi9/httpd-24

You can also set the following mount points by passing the -v /host:/container flag to podman.

/var/www
Apache HTTP Server data directory

/var/log/httpd24
Apache HTTP Server log directory (available only when running as root, path /var/log/httpd is used in case of Fedora based image)

Notice: When mouting a directory from the host into the container, ensure that the mounted directory has the appropriate permissions and that the owner and group of the directory matches the user UID or name which is running inside the container.

Default SSL certificates

Default SSL certificates are generated when Apache HTTP server container is started for the first time or own SSL certificates were not provided (see bolow how to provide them). SSL certificates are not stored in the base image but generated, so each container will have unique default SSL key pair. SSL certificate/key are stored in /etc/httpd/tls directory:

/etc/httpd/tls/localhost.key
/etc/httpd/tls/localhost.crt

Using own SSL certificates

In order to provide own SSL certificates for securing the connection with SSL, use the extending feature described above. In particular, put the SSL certificates into a separate directory inside your application:

./httpd-ssl/certs/server-cert-selfsigned.pem
./httpd-ssl/private/server-key.pem

The default behaviour is to look for the certificate and the private key in subdirectories certs/ and private/; those files will be used for the ssl settings in the httpd.

Default user

By default, Apache HTTP Server container runs as UID 1001. That means the volume mounted directories for the files (if mounted using -v option) need to be prepared properly, so the UID 1001 can read them.

To run the container as a different UID, use -u option. For example if you want to run the container as UID 1234, execute the following command:

podman run -d -u 1234 ubi9/httpd-24

To log into a volume mounted directory, the container needs to be run as UID 0 (see above).

Troubleshooting

The httpd deamon in the container logs to the standard output by default, so the log is available in the container log. The log can be examined by running:

podman logs <container>

See also

Dockerfile and other sources for this container image are available on https://github.com/sclorg/httpd-container. In that repository, the Dockerfile for CentOS is called Dockerfile, the Dockerfile for RHEL7 is called Dockerfile.rhel7, the Dockerfile for RHEL8 is called Dockerfile.rhel8, and the Dockerfile for Fedora is called Dockerfile.fedora.

","long_description_markdown":"Apache HTTP Server 2.4 available as container, is a powerful, efficient,\nand extensible web server. Apache supports a variety of features, many implemented as compiled modules\nwhich extend the core functionality.\nThese can range from server-side programming language support to authentication schemes.\nVirtual hosting allows one Apache installation to serve many different Web sites.\"\n\n\nUsage in OpenShift\n---------------------\nIn this example, we assume that you are using the `ubi9/httpd-24` image, available through the `httpd:24` imagestream tag in Openshift.\nTo build a simple [httpd-sample-app](https://github.com/sclorg/httpd-ex.git) application in Openshift:\n\n```\noc new-app httpd:24~https://github.com/sclorg/httpd-ex.git\n```\n\nTo access the application:\n```\n$ oc get pods\n$ oc exec -- curl 127.0.0.1:8080\n```\n\nSource-to-Image framework and scripts\n---------------------\nThis image supports the [Source-to-Image](https://docs.openshift.com/container-platform/3.11/creating_images/s2i.html)\n(S2I) strategy in OpenShift. The Source-to-Image is an OpenShift framework\nwhich makes it easy to write images that take application source code as\nan input, use a builder image like this httpd container image, and produce\na new image that runs the assembled application as an output.\n\nTo support the Source-to-Image framework, important scripts are included in the builder image:\n\n* The `/usr/libexec/s2i/run` script is set as the default command in the resulting container image (the new image with the application artifacts).\n\n* The `/usr/libexec/s2i/assemble` script inside the image is run to produce a new image with the application artifacts. The script takes sources of a given application and places them into appropriate directories inside the image. The structure of httpd-app can look like this:\n\n**`./httpd-cfg`** \n Can contain additional Apache configuration files (`*.conf`)\n\n**`./httpd-pre-init`** \n Can contain shell scripts (`*.sh`) that are sourced before `httpd` is started\n\n**`./httpd-ssl`** \n Can contain user's own SSL certificate (in the `certs/` subdirectory) and a key (in the `private/` subdirectory)\n\n**`./`** \n Application source code\n\n\nBuild an application using a Dockerfile\n---------------------\nCompared to the Source-to-Image strategy, using a Dockerfile is a more\nflexible way to build an httpd container image with an application.\nUse a Dockerfile when Source-to-Image is not sufficiently flexible for you or\nwhen you build the image outside of the OpenShift environment.\n\nTo use the httpd image in a Dockerfile, follow these steps:\n\n#### 1. Pull a base builder image to build on\n\n```\npodman pull ubi9/httpd-24\n```\n\n#### 2. Pull an application code\n\nAn example application available at https://github.com/sclorg/httpd-ex.git is used here. To adjust the example application, clone the repository.\n\n```\ngit clone https://github.com/sclorg/httpd-ex.git app-src\n```\n\n#### 3. Prepare an application inside a container\n\nThis step usually consists of at least these parts:\n\n* putting the application source into the container\n* moving certificates to the correct place (if available in the application source code)\n* setting the default command in the resulting image\n\nFor all these three parts, you can either set up all manually and use the `httpd` or `run-httpd` commands explicitly in the Dockerfile ([3.1.](#31-to-use-own-setup-create-a-dockerfile-with-this-content)), or you can use the Source-to-Image scripts inside the image ([3.2.](#32-to-use-the-source-to-image-scripts-and-build-an-image-using-a-dockerfile-create-a-dockerfile-with-this-content). For more information about these scripts, which enable you to set-up and run the httpd daemon, see the \"Source-to-Image framework and scripts\" section above.\n\n##### 3.1. To use your own setup, create a Dockerfile with this content:\n```\nFROM registry.redhat.io/ubi9/httpd-24\n\n# Add application sources\nADD app-src/index.html /var/www/html/index.html\n\n# The run script uses standard ways to run the application\nCMD run-httpd\n```\n\n##### 3.2. To use the Source-to-Image scripts and build an image using a Dockerfile, create a Dockerfile with this content:\n```\nFROM registry.redhat.io/ubi9/httpd-24\n\n# Add application sources to a directory where the assemble script expects them\n# and set permissions so that the container runs without the root access\nUSER 0\nADD app-src/index.html /tmp/src/index.html\nRUN chown -R 1001:0 /tmp/src\nUSER 1001\n\n# Let the assemble script install the dependencies\nRUN /usr/libexec/s2i/assemble\n\n# The run script uses standard ways to run the application\nCMD /usr/libexec/s2i/run\n```\n\n#### 4. Build a new image from a Dockerfile prepared in the previous step\n\n```\npodman build -t httpd-app .\n```\n\n#### 5. Run the resulting image with the final application\n\n```\npodman run -d httpd-app\n```\n\n\nDirect usage with a mounted directory\n-----\n\nAn example of the data on the host for both the examples above, which is served by\nThe Apache HTTP web server:\n\n```\n$ ls -lZ /wwwdata/html\n-rw-r--r--. 1 1001 1001 54321 Jan 01 12:34 index.html\n-rw-r--r--. 1 1001 1001 5678 Jan 01 12:34 page.html\n```\n\nIf you want to run the image directly and mount the static pages available in the `/wwwdata/` directory on the host\nas a container volume, execute the following command:\n\n```\n$ podman run -d --name httpd -p 8080:8080 -v /wwwdata:/var/www:Z ubi9/httpd-24\n```\n\nThis creates a container named `httpd` running the Apache HTTP Server, serving data from\n` the /wwwdata/` directory. Port 8080 is exposed and mapped to the host.\n\n\n\nEnvironment variables and volumes\n---------------------------------\n\nThe Apache HTTP Server container image supports the following configuration variable, which can be set by using the `-e` option with the podman run command:\n\n**`HTTPD_LOG_TO_VOLUME`** \n By default, httpd logs into standard output, so the logs are accessible by using the podman logs command. When `HTTPD_LOG_TO_VOLUME` is set, httpd logs into `/var/log/httpd24`, which can be mounted to host system using the container volumes. This option is only allowed when container is run as UID 0.\n\n**`HTTPD_MPM`**\n The variable `HTTPD_MPM` can be set to change the default Multi-Processing Module (MPM) from the package default MPM.\n\n\nIf you want to run the image and mount the log files into `/wwwlogs` on the host\nas a container volume, execute the following command:\n\n```\n$ podman run -d -u 0 -e HTTPD_LOG_TO_VOLUME=1 --name httpd -v /wwwlogs:/var/log/httpd24:Z ubi9/httpd-24\n```\n\nTo run an image using the `event` MPM (rather than the default `prefork`), execute the following command:\n\n```\n$ podman run -d -e HTTPD_MPM=event --name httpd ubi9/httpd-24\n```\n\nYou can also set the following mount points by passing the `-v /host:/container` flag to podman.\n\n**`/var/www`** \n Apache HTTP Server data directory\n\n**`/var/log/httpd24`** \n Apache HTTP Server log directory (available only when running as root, path `/var/log/httpd` is used in case of Fedora based image)\n\n\n**Notice: When mouting a directory from the host into the container, ensure that the mounted\ndirectory has the appropriate permissions and that the owner and group of the directory\nmatches the user UID or name which is running inside the container.**\n\nDefault SSL certificates\n------------------------\n\nDefault SSL certificates are generated when Apache HTTP server container is started for the first time or own SSL certificates were not provided (see bolow how to provide them). SSL certificates are not stored in the base image but generated, so each container will have unique default SSL key pair. SSL certificate/key are stored in /etc/httpd/tls directory:\n\n /etc/httpd/tls/localhost.key\n /etc/httpd/tls/localhost.crt\n\n\nUsing own SSL certificates\n--------------------------\nIn order to provide own SSL certificates for securing the connection with SSL, use the extending feature described above. In particular, put the SSL certificates into a separate directory inside your application:\n\n ./httpd-ssl/certs/server-cert-selfsigned.pem\n ./httpd-ssl/private/server-key.pem\n\nThe default behaviour is to look for the certificate and the private key in subdirectories certs/ and private/; those files will be used for the ssl settings in the httpd.\n\n\nDefault user\n------------\n\nBy default, Apache HTTP Server container runs as UID 1001. That means the volume mounted directories for the files (if mounted using `-v` option) need to be prepared properly, so the UID 1001 can read them.\n\nTo run the container as a different UID, use `-u` option. For example if you want to run the container as UID 1234, execute the following command:\n\n```\npodman run -d -u 1234 ubi9/httpd-24\n```\n\nTo log into a volume mounted directory, the container needs to be run as UID 0 (see above).\n\n\nTroubleshooting\n---------------\nThe httpd deamon in the container logs to the standard output by default, so the log is available in the container log. The log can be examined by running:\n\n podman logs \n\n\nSee also\n--------\nDockerfile and other sources for this container image are available on\nhttps://github.com/sclorg/httpd-container.\nIn that repository, the Dockerfile for CentOS is called Dockerfile, the Dockerfile\nfor RHEL7 is called Dockerfile.rhel7, the Dockerfile for RHEL8 is called Dockerfile.rhel8,\nand the Dockerfile for Fedora is called Dockerfile.fedora.","name":"Apache httpd 2.4","openshift_tags":"builder,httpd,httpd-24","short_description":"Platform for running Apache httpd 2.4 or building httpd-based application"},"documentation_links":[],"fbc_opt_in":false,"freshness_grades_unknown_until_date":null,"includes_multiple_content_streams":false,"last_update_date":"2025-05-13T05:37:51.961000+00:00","metadata_source":"quay","namespace":"ubi9","non_production_only":false,"object_type":"containerRepository","privileged_images_allowed":false,"product_listings":["609560d9e2b160d361d24f98"],"protected_for_pull":false,"protected_for_search":false,"published":true,"registry":"registry.access.redhat.com","registry_target":"redhat-prod","release_categories":["Generally Available"],"repository":"ubi9/httpd-24","requires_terms":false,"source_container_image_enabled":true,"total_size_bytes":23754536300,"total_uncompressed_size_bytes":72509991660,"use_latest":true,"vendor_label":"redhat","_links":{"certification_project":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/httpd-24/projects/certification"},"images":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/httpd-24/images"},"operator_bundles":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/httpd-24/operators/bundles"},"product_listings":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/httpd-24/product-listings"},"vendor":{"href":"/v1/vendors/label/redhat"}}} +-- catalog.redhat.com/api/containers/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/httpd-24/images -- +{"data":[{"_id":"6272a08c4841f16f4f118c5c","architecture":"amd64","creation_date":"2022-05-04T15:49:32.407000+00:00","image_id":"sha256:4c5705754811bc34b07dcb1704b4ab91b4309b7909268028a00336add363a13b","last_update_date":"2024-03-28T09:48:39.987000+00:00","object_type":"containerImage","parsed_data":{"architecture":"amd64","created":"2022-05-04T15:45:12.521988Z","layers":["sha256:d62c39823860cca52ee3000f22209774d7ea5eecf9285f83ed8c440f84aba743","sha256:335d2a0e4ca81ba2c487e559870940f56ca779e191745e030792bfb5a95b2b05","sha256:f95ee31bf3b71858108a30a93d9ffae722557f909d4b18e22f3157f96ca30dba","sha256:2c9b1d3d1a0af969583918cf19368bb46fe5d6c168c1af32e3b8be2ab2d57a88"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:3608019ed0055eb2c4565b0496308eff770b9b1f31de29f249b575e5cc43eeb5","size_bytes":97788321},{"layer_id":"sha256:d5f17815d8609605794dc104a14832a396ccb8bcf3f57763f1cbf024b9672787","size_bytes":54198329},{"layer_id":"sha256:0fbfc9ee0d4708c4609b66dc462ba478b0600fd7f0d3a687ddcefd0f298727cc","size_bytes":4642},{"layer_id":"sha256:a8504f08c55488bbc45f419b81bf06e23947df23e7defb73e47c94184024ad07","size_bytes":211055872}]},"_links":{"artifacts":{"href":"/v1/images/id/6272a08c4841f16f4f118c5c/artifacts"},"requests":{"href":"/v1/images/id/6272a08c4841f16f4f118c5c/requests"},"rpm_manifest":{"href":"/v1/images/id/6272a08c4841f16f4f118c5c/rpm-manifest"},"test_results":{"href":"/v1/images/id/6272a08c4841f16f4f118c5c/test-results"},"vulnerabilities":{"href":"/v1/images/id/6272a08c4841f16f4f118c5c/vulnerabilities"}}},{"_id":"6272a08f4841f16f4f118c60","architecture":"ppc64le","creation_date":"2022-05-04T15:49:35.350000+00:00","image_id":"sha256:93bb40a45c4e072e00d74a4fb01c3609bc9bd0ce2a9471ea39af1261303659b2","last_update_date":"2024-03-28T09:49:44.586000+00:00","object_type":"containerImage","parsed_data":{"architecture":"ppc64le","created":"2022-05-04T15:50:42.409381Z","layers":["sha256:787fbf78df8e04c322f02c7d57067e539dfff08485595d391269260e664c7180","sha256:e300b39d3439b5fe84496d1e1720cd9063d85d4cd61e84c16c07a869061cd59a","sha256:8623dda09cc0ef358d183d3b2313455fea30b0d45f9493879f5e3a3f3b76efdf","sha256:c049534b9160c81cff9e87c9ba943324d258666c71d9a99374dafcefd5661e11"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:89beb0a07c15b18d38d128ede596ee9b91f775ca90fb2f94170dbbed06d85ca5","size_bytes":109898088},{"layer_id":"sha256:313178bb62fa70606e5069ae5ceadb81e0c2d35492d2553577a458849a4a2858","size_bytes":58824263},{"layer_id":"sha256:74534a300c1741d16489fc1abafce15b3451aae0a33ea07cb1b150cae5dface2","size_bytes":4647},{"layer_id":"sha256:38053c80ce88753bf1cd28ff5eda265d635b40c38a0a07d2ce2a2eebd6ebfd54","size_bytes":251360562}]},"_links":{"artifacts":{"href":"/v1/images/id/6272a08f4841f16f4f118c60/artifacts"},"requests":{"href":"/v1/images/id/6272a08f4841f16f4f118c60/requests"},"rpm_manifest":{"href":"/v1/images/id/6272a08f4841f16f4f118c60/rpm-manifest"},"test_results":{"href":"/v1/images/id/6272a08f4841f16f4f118c60/test-results"},"vulnerabilities":{"href":"/v1/images/id/6272a08f4841f16f4f118c60/vulnerabilities"}}},{"_id":"6272a0924841f16f4f118c66","architecture":"s390x","creation_date":"2022-05-04T15:49:38.350000+00:00","image_id":"sha256:f3b53fc56538a71b6ccdd3cd9f695d539f3462ad70f8400fb2c5e05acae64395","last_update_date":"2024-03-28T09:49:26.094000+00:00","object_type":"containerImage","parsed_data":{"architecture":"s390x","created":"2022-05-04T15:44:41.393459Z","layers":["sha256:8c96ca308b9eaaefb21a2027677e57e44fb25d1d675401ba2bffbd23894ed4bf","sha256:81fccf8949eed78905c58874440a0b1b395b191649bac1e5c51da31826b383e4","sha256:d3d34aa2f6e9adb72bb1c5906cb4ed3aff28371252a2af8f2499152ac74232bb","sha256:6505b024e539929a1909c8820535221fe70806ce5467b5f30aef8d45a4a97da7"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:0d4b147c3d47b151026e534f25c1bcf52b0bcf86f7a5054b86e392345949ccdb","size_bytes":96532406},{"layer_id":"sha256:c7a16df8edaef7fd265d59106fb9c7780dab6f444537fab9dd876ddd08f6ed75","size_bytes":54116863},{"layer_id":"sha256:f04d9c84fb0c4d8e9b1398213ce546466aa5936f63091d1c839b14f589419f80","size_bytes":4641},{"layer_id":"sha256:38acd6d6a1423c6c8a752db3e80c97d314e519c7ff1c9d73f11c71bc0e157143","size_bytes":205816910}]},"_links":{"artifacts":{"href":"/v1/images/id/6272a0924841f16f4f118c66/artifacts"},"requests":{"href":"/v1/images/id/6272a0924841f16f4f118c66/requests"},"rpm_manifest":{"href":"/v1/images/id/6272a0924841f16f4f118c66/rpm-manifest"},"test_results":{"href":"/v1/images/id/6272a0924841f16f4f118c66/test-results"},"vulnerabilities":{"href":"/v1/images/id/6272a0924841f16f4f118c66/vulnerabilities"}}},{"_id":"6272a0954841f16f4f118c6a","architecture":"arm64","creation_date":"2022-05-04T15:49:41.034000+00:00","image_id":"sha256:ea436702543da19a2b46586bebba9f09585115f1cd3a0dcdcfd69ddc23bba0c3","last_update_date":"2024-03-28T09:49:38.437000+00:00","object_type":"containerImage","parsed_data":{"architecture":"arm64","created":"2022-05-04T15:46:49.384065Z","layers":["sha256:e3e956a9da19f91cd09e9e902551db18bd778f3551d2a7494998b2fdca69327d","sha256:306af8932fc764c519eec20a0788aa39112593400d143c076b6f70e59e787975","sha256:21f54a7cff457e5e27d7777aed5db47dd10426bd5a1bcbe2f0894383295f8a5d","sha256:b9680453047ed1c7559e26e0ba71504d2c7f71e622272257bc619ca5a5736c14"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:29a07b724ddb9b90a12f750c5ed42d4303b0b329de9765c95ac0d5bed34d6bde","size_bytes":100114215},{"layer_id":"sha256:97c28a0d026df10389982ab9ad00b39926063ed64f8c911e0ae27c18822814de","size_bytes":56848973},{"layer_id":"sha256:8cd39331f19aca0df47e3b9b76f17b0c80a268a2b7f28a43d54090df8a7e930a","size_bytes":4640},{"layer_id":"sha256:98a46c9e4bcca41e0d24440fff35333989df77139be129e89a0ed540029c248d","size_bytes":226640754}]},"_links":{"artifacts":{"href":"/v1/images/id/6272a0954841f16f4f118c6a/artifacts"},"requests":{"href":"/v1/images/id/6272a0954841f16f4f118c6a/requests"},"rpm_manifest":{"href":"/v1/images/id/6272a0954841f16f4f118c6a/rpm-manifest"},"test_results":{"href":"/v1/images/id/6272a0954841f16f4f118c6a/test-results"},"vulnerabilities":{"href":"/v1/images/id/6272a0954841f16f4f118c6a/vulnerabilities"}}},{"_id":"62a86126d095e360edaeea32","architecture":"amd64","creation_date":"2022-06-14T10:21:26.386000+00:00","image_id":"sha256:9eca78560c67d6b1e9ac96e4b66dd747d834747363edee6802bba0b586c43105","last_update_date":"2024-03-28T09:48:04.249000+00:00","object_type":"containerImage","parsed_data":{"architecture":"amd64","created":"2022-06-14T07:43:48.854426Z","layers":["sha256:63f85fbe58560fc6017383812f0f4a8c499a8a7bc301857bdbac8339110ed194","sha256:867b73f4b5c2b7a42b8ef43f3ba34bbecf4db8bd1128f9fcb0716e00392e0321","sha256:045b2b334d7f9677117f56a81edde88e64e6fe4d3bd3bf79852be0e064e1bc59","sha256:2314853f64c21804710e5ba7113fc4b3c0e025d8b46b0f987c5c0bcce01893ba"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:b1f78892ad8a46bcc027bebe336023ade7da2d85d38651d034e9942c5baf2cef","size_bytes":98700931},{"layer_id":"sha256:2c5931420328613d46ff14db7970861ff8757595840f37a67a875e826f320148","size_bytes":55107783},{"layer_id":"sha256:f4f6211181cd64b5c2d796ed5783d37fe60c9fe7aba31dbe2f1dc52f4e3fd8fb","size_bytes":4686},{"layer_id":"sha256:93543dd0e6a577fc272b8c0d8ff1ba95bc412ca797d548d50731dc47b636fa69","size_bytes":211100686}]},"_links":{"artifacts":{"href":"/v1/images/id/62a86126d095e360edaeea32/artifacts"},"requests":{"href":"/v1/images/id/62a86126d095e360edaeea32/requests"},"rpm_manifest":{"href":"/v1/images/id/62a86126d095e360edaeea32/rpm-manifest"},"test_results":{"href":"/v1/images/id/62a86126d095e360edaeea32/test-results"},"vulnerabilities":{"href":"/v1/images/id/62a86126d095e360edaeea32/vulnerabilities"}}},{"_id":"62a86129d095e360edaeea3b","architecture":"ppc64le","creation_date":"2022-06-14T10:21:29.367000+00:00","image_id":"sha256:e456936fc0afb233010990a0f00a250c75005f368a627c17de04529a401d0df9","last_update_date":"2024-03-28T09:47:49.772000+00:00","object_type":"containerImage","parsed_data":{"architecture":"ppc64le","created":"2022-06-14T07:44:33.036417Z","layers":["sha256:4026bd417516d6b7d8a4f9d0bf64a70bb5e4ae5328968e007267d68bea7d5603","sha256:fbe1dcea972fe5fdd685dfc83af435b0a5f3020c3d64d01b4d943ca2de1388ae","sha256:b84257d6b7180364375d5480b557eee137833f0c4c14da82d4ed2b66e585eafe","sha256:78b7f2ed3f9b128feeb1ecc1aae4e26525d8b3bd8c117e4879150871c3c409c0"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:06ea1f5d6f65e676cd54dae495e6886c1f641a047b3b05e637f91e918729deba","size_bytes":110949918},{"layer_id":"sha256:1c968ebf5a6c4e7e6722898129320d263acb9133f9c3a792267367c616ce6a00","size_bytes":59864923},{"layer_id":"sha256:38b6836034afe6b024467b8c1b534e90bfc6bbb246bdaba0e19997d07b509a88","size_bytes":4691},{"layer_id":"sha256:3eb00e024c92f349d4ab20245a68167146fd35ea8fe4a0dca8255ed2dbaa907f","size_bytes":251426287}]},"_links":{"artifacts":{"href":"/v1/images/id/62a86129d095e360edaeea3b/artifacts"},"requests":{"href":"/v1/images/id/62a86129d095e360edaeea3b/requests"},"rpm_manifest":{"href":"/v1/images/id/62a86129d095e360edaeea3b/rpm-manifest"},"test_results":{"href":"/v1/images/id/62a86129d095e360edaeea3b/test-results"},"vulnerabilities":{"href":"/v1/images/id/62a86129d095e360edaeea3b/vulnerabilities"}}}],"page":0,"page_size":6,"total":296} +-- catalog.redhat.com/api/containers/v1/images/id/6272a08c4841f16f4f118c5c/rpm-manifest -- +{"_id":"6272a08e4841f16f4f118c5e","creation_date":"2022-05-04T15:49:34.092000+00:00","image_id":"6272a08c4841f16f4f118c5c","last_update_date":"2023-07-28T12:46:33.959000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-11.2.1-9.4.el9.x86_64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC version 11 shared support library","version":"11.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"System-wide crypto policies","version":"20220223"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2022a-1.el9_0.noarch","release":"1.el9_0","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2022a-1.el9_0.src","summary":"Timezone data","version":"2022a"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.29.26-3.el9_0.x86_64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-9.0-2.17.el9.x86_64","release":"2.17.el9","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:9.0-2.17.el9.src","summary":"Red Hat Enterprise Linux release file","version":"9.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.13.7-6.el9.noarch","release":"6.el9","srpm_name":"setup","srpm_nevra":"setup-0:2.13.7-6.el9.src","summary":"A set of system configuration and setup files","version":"2.13.7"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.16-2.el9.x86_64","release":"2.el9","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.16-2.el9.src","summary":"The basic directory layout for a Linux system","version":"3.16"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-13.el9.noarch","release":"13.el9","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-13.el9.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools-wheel","nvra":"python3-setuptools-wheel-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"The setuptools wheel","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pcre2-syntax","nvra":"pcre2-syntax-10.37-3.el9.1.noarch","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Documentation for PCRE2 regular expressions","version":"10.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.2-8.20210508.el9.noarch","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Descriptions of common terminals","version":"6.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.34-28.el9_0.x86_64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Minimal language packs for glibc.","version":"2.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.34-28.el9_0.x86_64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Common binaries and locale data for glibc","version":"2.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.34-28.el9_0.x86_64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The GNU libc libraries","version":"2.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.2-8.20210508.el9.x86_64","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses libraries","version":"6.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-5.1.8-4.el9.x86_64","release":"4.el9","srpm_name":"bash","srpm_nevra":"bash-0:5.1.8-4.el9.src","summary":"The GNU Bourne Again shell","version":"5.1.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-31.el9_0.1.x86_64","release":"31.el9_0.1","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-31.el9_0.1.src","summary":"Compression and decompression library","version":"1.2.11"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.5-7.el9.x86_64","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"Libraries for decoding LZMA compression","version":"5.2.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.8-8.el9.x86_64","release":"8.el9","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.8-8.el9.src","summary":"Libraries for applications using bzip2","version":"1.0.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.4.18-3.el9.x86_64","release":"3.el9","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.4.18-3.el9.src","summary":"Extended crypt library for descrypt, md5crypt, bcrypt, and others","version":"4.4.18"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libzstd","nvra":"libzstd-1.5.1-2.el9.x86_64","release":"2.el9","srpm_name":"zstd","srpm_nevra":"zstd-0:1.5.1-2.el9.src","summary":"Zstd shared library","version":"1.5.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.48-8.el9.x86_64","release":"8.el9","srpm_name":"libcap","srpm_nevra":"libcap-0:2.48-8.el9.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.48"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.34.1-5.el9.x86_64","release":"5.el9","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.34.1-5.el9.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.34.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Universally unique ID library","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.18-8.el9.x86_64","release":"8.el9","srpm_name":"popt","srpm_nevra":"popt-0:1.18-8.el9.src","summary":"C library for parsing command line parameters","version":"1.18"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.13-1.el9.x86_64","release":"1.el9","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.13-1.el9.src","summary":"Library providing XML and HTML support","version":"2.9.13"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.4.2-7.el9.x86_64","release":"7.el9","srpm_name":"libffi","srpm_nevra":"libffi-0:3.4.2-7.el9.src","summary":"A portable foreign function interface library","version":"3.4.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.24.1-2.el9.x86_64","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.24.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.42-5.el9.x86_64","release":"5.el9","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.42-5.el9.src","summary":"Library for error values used by GnuPG components","version":"1.42"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-8.1-4.el9.x86_64","release":"4.el9","srpm_name":"readline","srpm_nevra":"readline-0:8.1-4.el9.src","summary":"A library for editing typed command lines","version":"8.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.2.0-10.el9.x86_64","release":"10.el9","srpm_name":"gmp","srpm_nevra":"gmp-1:6.2.0-10.el9.src","summary":"A GNU arbitrary precision library","version":"6.2.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.14-11.el9.x86_64","release":"11.el9","srpm_name":"json-c","srpm_nevra":"json-c-0:0.14-11.el9.src","summary":"JSON implementation in C","version":"0.14"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Formatting library for ls-like programs.","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-11.2.1-9.4.el9.x86_64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GNU Standard C++ Library","version":"11.2.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.4.2-4.el9.x86_64","release":"4.el9","srpm_name":"lua","srpm_nevra":"lua-0:5.4.2-4.el9.src","summary":"Libraries for lua","version":"5.4.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.10.0-2.el9.x86_64","release":"2.el9","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.10.0-2.el9.src","summary":"A general-purpose cryptography library","version":"1.10.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.186-1.el9.x86_64","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Library to read and write ELF files","version":"0.186"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.39-8.el9.x86_64","release":"8.el9","srpm_name":"file","srpm_nevra":"file-0:5.39-8.el9.src","summary":"Libraries for applications using libmagic","version":"5.39"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.10-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"expat","srpm_nevra":"expat-0:2.2.10-12.el9_0.src","summary":"An XML parser library","version":"2.2.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.5.1-3.el9.x86_64","release":"3.el9","srpm_name":"attr","srpm_nevra":"attr-0:2.5.1-3.el9.src","summary":"Dynamic library for extended attribute support","version":"2.5.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.3.1-3.el9.x86_64","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Dynamic library for access control list support","version":"2.3.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.8.2-7.el9.x86_64","release":"7.el9","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.8.2-7.el9.src","summary":"Alternate posix capabilities library","version":"0.8.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0.7-101.el9_0.2.x86_64","release":"101.el9_0.2","srpm_name":"audit","srpm_nevra":"audit-0:3.0.7-101.el9_0.2.src","summary":"Dynamic library for libaudit","version":"3.0.7"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.46.5-2.el9.x86_64","release":"2.el9","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.46.5-2.el9.src","summary":"Common error description library","version":"1.46.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.9.3-5.el9.x86_64","release":"5.el9","srpm_name":"lz4","srpm_nevra":"lz4-0:1.9.3-5.el9.src","summary":"Libaries for lz4","version":"1.9.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.5-3.el9.x86_64","release":"3.el9","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.5-3.el9.src","summary":"GnuPG IPC library","version":"2.5.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.19-4.el9.x86_64","release":"4.el9","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.19-4.el9.src","summary":"Libraries files for gdbm","version":"1.19"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.6.1-4.el9.x86_64","release":"4.el9","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.6.1-4.el9.src","summary":"Key utilities library","version":"1.6.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-3.3-2.el9.x86_64","release":"2.el9","srpm_name":"libsepol","srpm_nevra":"libsepol-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.13-4.el9.x86_64","release":"4.el9","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.13-4.el9.src","summary":"Library for handling page faults in user mode","version":"2.13"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.16.0-7.el9.x86_64","release":"7.el9","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.16.0-7.el9.src","summary":"The ASN.1 library used in GNUTLS","version":"4.16.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.10-15.el9.x86_64","release":"15.el9","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.10-15.el9.src","summary":"GNU Unicode string library","version":"0.9.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.44-3.el9.3.x86_64","release":"3.el9.3","srpm_name":"pcre","srpm_nevra":"pcre-0:8.44-3.el9.3.src","summary":"Perl-compatible regular expression library","version":"8.44"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.6-5.el9.x86_64","release":"5.el9","srpm_name":"grep","srpm_nevra":"grep-0:3.6-5.el9.src","summary":"Pattern matching utilities","version":"3.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.37-3.el9.1.x86_64","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Perl-compatible regular expression library","version":"10.37"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-3.3-2.el9.x86_64","release":"2.el9","srpm_name":"libselinux","srpm_nevra":"libselinux-0:3.3-2.el9.src","summary":"SELinux library and simple utilities","version":"3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.32-31.el9.x86_64","release":"31.el9","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.32-31.el9.src","summary":"coreutils multicall binary","version":"8.32"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Block device ID library","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Device mounting library","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.8-9.el9.x86_64","release":"9.el9","srpm_name":"sed","srpm_nevra":"sed-0:4.8-9.el9.src","summary":"A GNU stream text editor","version":"4.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Partitioning library for fdisk-like programs.","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.10-9.el9_0.x86_64","release":"9.el9_0","srpm_name":"gzip","srpm_nevra":"gzip-0:1.10-9.el9_0.src","summary":"The GNU data compression program","version":"1.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-27.el9.x86_64","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cracklib-dicts","nvra":"cracklib-dicts-2.9.6-27.el9.x86_64","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"The standard CrackLib dictionaries","version":"2.9.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-3.3-2.el9.x86_64","release":"2.el9","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.9-3.el9.x86_64","release":"3.el9","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.9-3.el9.src","summary":"Utilities for managing accounts and shadow password files","version":"4.9"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.2.1-6.el9.x86_64","release":"6.el9","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.2.1-6.el9.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.2.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.3.0-7.el9.x86_64","release":"7.el9","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.3.0-7.el9.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.3.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.3.1-3.el9.x86_64","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Access control list utilities","version":"2.3.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.18-1.el9.x86_64","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Comps XML file manipulation library","version":"0.1.18"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-4.1.0-7.el9.x86_64","release":"7.el9","srpm_name":"mpfr","srpm_nevra":"mpfr-0:4.1.0-7.el9.src","summary":"C library for multiple-precision floating-point computations","version":"4.1.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-5.1.0-6.el9.x86_64","release":"6.el9","srpm_name":"gawk","srpm_nevra":"gawk-0:5.1.0-6.el9.src","summary":"The GNU version of the AWK text processing utility","version":"5.1.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.7.3-2.el9.x86_64","release":"2.el9","srpm_name":"nettle","srpm_nevra":"nettle-0:3.7.3-2.el9.src","summary":"A low-level cryptographic library","version":"3.7.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.5.1-4.el9.x86_64","release":"4.el9","srpm_name":"libksba","srpm_nevra":"libksba-0:1.5.1-4.el9.src","summary":"CMS and X.509 library","version":"1.5.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"systemd-rpm-macros","nvra":"systemd-rpm-macros-250-6.el9_0.noarch","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"Macros that define paths and scriptlets related to systemd","version":"250"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"alternatives","nvra":"alternatives-1.20-2.el9.x86_64","release":"2.el9","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.20-2.el9.src","summary":"A tool to maintain symbolic links determining default commands","version":"1.20"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.24.1-2.el9.x86_64","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"System trust module from p11-kit","version":"0.24.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2020.2.50-94.el9.noarch","release":"94.el9","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2020.2.50-94.el9.src","summary":"The Mozilla CA root certificate bundle","version":"2020.2.50"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-3.0.1-23.el9_0.x86_64","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"A general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-250-6.el9_0.x86_64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd libraries","version":"250"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.7.3-9.el9.x86_64","release":"9.el9","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.7.3-9.el9.src","summary":"A TLS protocol implementation","version":"3.7.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.68.4-5.el9.x86_64","release":"5.el9","srpm_name":"glib2","srpm_nevra":"glib2-0:2.68.4-5.el9.src","summary":"A library of handy utility functions","version":"2.68.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.68.0-10.el9.x86_64","release":"10.el9","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.68.0-10.el9.src","summary":"Introspection system for GObject-based libraries","version":"1.68.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.6.6-1.el9.x86_64","release":"1.el9","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.6.6-1.el9.src","summary":"Library for JavaScript Object Notation format","version":"1.6.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-7.el9.x86_64","release":"7.el9","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-7.el9.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.20-5.el9.x86_64","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"Libraries for accessing D-BUS","version":"1.12.20"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"util-linux-core","nvra":"util-linux-core-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"The most essential utilities from the util-linux suite.","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-28-7.el9.x86_64","release":"7.el9","srpm_name":"kmod","srpm_nevra":"kmod-0:28-7.el9.src","summary":"Libraries to handle kernel module loading and unloading","version":"28"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.5.3-1.el9.x86_64","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"A library for handling streaming archive formats","version":"3.5.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"openssl","nvra":"openssl-3.0.1-23.el9_0.x86_64","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"Utilities from the general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pip-wheel","nvra":"python3-pip-wheel-21.2.3-6.el9.noarch","release":"6.el9","srpm_name":"python-pip","srpm_nevra":"python-pip-0:21.2.3-6.el9.src","summary":"The pip wheel","version":"21.2.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3","nvra":"python3-3.9.10-2.el9.x86_64","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python 3.9 interpreter","version":"3.9.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.9.10-2.el9.x86_64","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python runtime libraries","version":"3.9.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.18-2.el9.x86_64","release":"2.el9","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.18-2.el9.src","summary":"D-Bus bindings for python3","version":"1.2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.15.0-9.el9.noarch","release":"9.el9","srpm_name":"python-six","srpm_nevra":"python-six-0:1.15.0-9.el9.src","summary":"Python 2 and 3 compatibility utilities","version":"1.15.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.8.1-6.el9.noarch","release":"6.el9","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.8.1-6.el9.src","summary":"Powerful extensions to the standard datetime module","version":"2.8.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-45.el9.noarch","release":"45.el9","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-45.el9.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-idna","nvra":"python3-idna-2.10-7.el9.noarch","release":"7.el9","srpm_name":"python-idna","srpm_nevra":"python-idna-0:2.10-7.el9.src","summary":"Internationalized Domain Names in Applications (IDNA)","version":"2.10"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools","nvra":"python3-setuptools-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"Easily build and distribute Python 3 packages","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-25.el9.noarch","release":"25.el9","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-25.el9.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.18-1.el9.x86_64","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Python 3 bindings for libcomps library","version":"0.1.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-chardet","nvra":"python3-chardet-4.0.0-5.el9.noarch","release":"5.el9","srpm_name":"python-chardet","srpm_nevra":"python-chardet-0:4.0.0-5.el9.src","summary":"Character encoding auto-detection in Python","version":"4.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.4.2-6.el9.noarch","release":"6.el9","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.4.2-6.el9.src","summary":"Module to simplify usage of decorators in python3","version":"4.4.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.40.1-5.el9.x86_64","release":"5.el9","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.40.1-5.el9.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.40.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libxml2","nvra":"python3-libxml2-2.9.13-1.el9.x86_64","release":"1.el9","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.13-1.el9.src","summary":"Python 3 bindings for the libxml2 library","version":"2.9.13"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-dmidecode","nvra":"python3-dmidecode-3.12.2-27.el9.x86_64","release":"27.el9","srpm_name":"python-dmidecode","srpm_nevra":"python-dmidecode-0:3.12.2-27.el9.src","summary":"Python 3 module to access DMI data","version":"3.12.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pysocks","nvra":"python3-pysocks-1.7.1-12.el9.noarch","release":"12.el9","srpm_name":"python-pysocks","srpm_nevra":"python-pysocks-0:1.7.1-12.el9.src","summary":"A Python SOCKS client module","version":"1.7.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-urllib3","nvra":"python3-urllib3-1.26.5-3.el9.noarch","release":"3.el9","srpm_name":"python-urllib3","srpm_nevra":"python-urllib3-0:1.26.5-3.el9.src","summary":"Python3 HTTP library with thread-safe connection pooling and file post","version":"1.26.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-requests","nvra":"python3-requests-2.25.1-6.el9.noarch","release":"6.el9","srpm_name":"python-requests","srpm_nevra":"python-requests-0:2.25.1-6.el9.src","summary":"HTTP library, written in Python, for human beings","version":"2.25.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-cloud-what","nvra":"python3-cloud-what-1.29.26-3.el9_0.x86_64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Python package for detection of public cloud provider","version":"1.29.26"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dmidecode","nvra":"dmidecode-3.3-7.el9.x86_64","release":"7.el9","srpm_name":"dmidecode","srpm_nevra":"dmidecode-1:3.3-7.el9.src","summary":"Tool to analyse BIOS DMI data","version":"3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-53.el9.x86_64","release":"53.el9","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-53.el9.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libeconf","nvra":"libeconf-0.4.1-2.el9.x86_64","release":"2.el9","srpm_name":"libeconf","srpm_nevra":"libeconf-0:0.4.1-2.el9.src","summary":"Enhanced config file parser library","version":"0.4.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.4-8.el9.x86_64","release":"8.el9","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.4-8.el9.src","summary":"A library for password generation and password quality checking","version":"1.4.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.5.1-9.el9.x86_64","release":"9.el9","srpm_name":"pam","srpm_nevra":"pam-0:1.5.1-9.el9.src","summary":"An extensible library which provides authentication for applications","version":"1.5.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"A collection of basic system utilities","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgomp","nvra":"libgomp-11.2.1-9.4.el9.x86_64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC OpenMP v4.5 shared support library","version":"11.2.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.43.0-5.el9.x86_64","release":"5.el9","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.43.0-5.el9.src","summary":"A library implementing the HTTP/2 protocol","version":"1.43.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.5.0-10.el9.x86_64","release":"10.el9","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.5.0-10.el9.src","summary":"Convenience library for kernel netlink sockets","version":"3.5.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.15-2.el9.x86_64","release":"2.el9","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.15-2.el9.src","summary":"Python module to interface with ethtool","version":"0.15"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.5.2-2.el9.x86_64","release":"2.el9","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.5.2-2.el9.src","summary":"Enhanced seccomp library","version":"2.5.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.183-4.el9.x86_64","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device mapper utility","version":"1.02.183"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.183-4.el9.x86_64","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device-mapper shared library","version":"1.02.183"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.4.3-4.el9.x86_64","release":"4.el9","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.4.3-4.el9.src","summary":"Cryptsetup shared library","version":"2.4.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.20-5.el9.x86_64","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus","version":"1.12.20"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-250-6.el9_0.x86_64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd PAM module","version":"250"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-250-6.el9_0.x86_64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"System and Service Manager","version":"250"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.20-5.el9.noarch","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus configuration","version":"1.12.20"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus-broker","nvra":"dbus-broker-28-5.el9.x86_64","release":"5.el9","srpm_name":"dbus-broker","srpm_nevra":"dbus-broker-0:28-5.el9.src","summary":"Linux D-Bus Message Broker","version":"28"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.186-1.el9.noarch","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Default yama attach scope sysctl setting","version":"0.186"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.186-1.el9.x86_64","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Libraries to handle compiled objects","version":"0.186"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.2-3.el9.x86_64","release":"3.el9","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.2-3.el9.src","summary":"Main loop abstraction library","version":"0.3.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.19.1-15.el9_0.x86_64","release":"15.el9_0","srpm_name":"krb5","srpm_nevra":"krb5-0:1.19.1-15.el9_0.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.19.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcurl-minimal","nvra":"libcurl-minimal-7.76.1-14.el9.x86_64","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of libcurl for minimal installations","version":"7.76.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"curl-minimal","nvra":"curl-minimal-7.76.1-14.el9.x86_64","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of curl for minimal installations","version":"7.76.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.16.1.3-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"The RPM package management system","version":"4.16.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.16.1.3-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for manipulating RPM packages","version":"4.16.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.7.20-2.el9.x86_64","release":"2.el9","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.7.20-2.el9.src","summary":"Package dependency solver","version":"0.7.20"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.16.1.3-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for building RPM packages","version":"4.16.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"tpm2-tss","nvra":"tpm2-tss-3.0.3-7.el9.x86_64","release":"7.el9","srpm_name":"tpm2-tss","srpm_nevra":"tpm2-tss-0:3.0.3-7.el9.src","summary":"TPM2.0 Software Stack","version":"3.0.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.4-4.el9.x86_64","release":"4.el9","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.4-4.el9.src","summary":"IMA/EVM support utilities","version":"1.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-20.el9.x86_64","release":"20.el9","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-20.el9.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.59-4.el9_0.x86_64","release":"4.el9_0","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.59-4.el9_0.src","summary":"LDAP support libraries","version":"2.4.59"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.63-10.el9.x86_64","release":"10.el9","srpm_name":"libuser","srpm_nevra":"libuser-0:0.63-10.el9.src","summary":"A user and group account administration library","version":"0.63"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-12.el9.x86_64","release":"12.el9","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-12.el9.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.114-4.el9.x86_64","release":"4.el9","srpm_name":"usermode","srpm_nevra":"usermode-0:1.114-4.el9.src","summary":"Tools for certain user account management tasks","version":"1.114"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.2.5-7.el9.x86_64","release":"7.el9","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.2.5-7.el9.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.2.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libmodulemd","nvra":"libmodulemd-2.13.0-2.el9.x86_64","release":"2.el9","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.13.0-2.el9.src","summary":"Module metadata manipulation library","version":"2.13.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.6-8.el9.x86_64","release":"8.el9","srpm_name":"npth","srpm_nevra":"npth-0:1.6-8.el9.src","summary":"The New GNU Portable Threads library","version":"1.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.3.3-1.el9.x86_64","release":"1.el9","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.3.3-1.el9.src","summary":"Utility for secure communication and data storage","version":"2.3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.15.1-6.el9.x86_64","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.15.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.14.2-1.el9.x86_64","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Repodata downloading library","version":"1.14.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.65.0-5.el9_0.x86_64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.65.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.65.0-5.el9_0.x86_64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.65.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.65.0-5.el9_0.x86_64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.65.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.14.2-1.el9.x86_64","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Python 3 bindings for the librepo library","version":"1.14.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.15.1-6.el9.x86_64","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"gpgme bindings for Python 3","version":"1.15.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm-sign-libs","nvra":"rpm-sign-libs-4.16.1.3-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for signing RPM packages","version":"4.16.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.16.1.3-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.16.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.29.26-3.el9_0.x86_64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-27.el9.x86_64","release":"27.el9","srpm_name":"which","srpm_nevra":"which-0:2.21-27.el9.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.21-2.el9.2.x86_64","release":"2.el9.2","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.21-2.el9.2.src","summary":"Detect if we are running in a virtual machine","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.15.2-6.el9.noarch","release":"6.el9","srpm_name":"libreport","srpm_nevra":"libreport-0:2.15.2-6.el9.src","summary":"Filesystem layout for libreport","version":"2.15.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Common data and configuration files for DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Python 3 interface to DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libdnf-plugin-subscription-manager","nvra":"libdnf-plugin-subscription-manager-1.29.26-3.el9_0.x86_64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Subscription Manager plugin for libdnf","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.24-4.el9_0.noarch","release":"4.el9_0","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.24-4.el9_0.src","summary":"Core Plugins for DNF","version":"4.0.24"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"fonts-filesystem","nvra":"fonts-filesystem-2.0.5-7.el9.1.noarch","release":"7.el9.1","srpm_name":"fonts-rpm-macros","srpm_nevra":"fonts-rpm-macros-1:2.0.5-7.el9.1.src","summary":"Directories used by font packages","version":"2.0.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dejavu-sans-fonts","nvra":"dejavu-sans-fonts-2.37-18.el9.noarch","release":"18.el9","srpm_name":"dejavu-fonts","srpm_nevra":"dejavu-fonts-0:2.37-18.el9.src","summary":"DejaVu Sans, a variable-width sans-serif font family","version":"2.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-font-en","nvra":"langpacks-core-font-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English core font meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-en","nvra":"langpacks-core-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks core meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks meta-package","version":"3.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.29.26-3.el9_0.x86_64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Tools and libraries for subscription and repository management","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies-scripts","nvra":"crypto-policies-scripts-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"Tool to switch between crypto policies","version":"20220223"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.8.0-5.el9.x86_64","release":"5.el9","srpm_name":"findutils","srpm_nevra":"findutils-1:4.8.0-5.el9.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.8.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.34-3.el9.x86_64","release":"3.el9","srpm_name":"tar","srpm_nevra":"tar-2:1.34-3.el9.src","summary":"GNU file archiving program","version":"1.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.2.2637-15.el9.x86_64","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"A minimal version of the VIM editor","version":"8.2.2637"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-10.2-9.el9.x86_64","release":"9.el9","srpm_name":"gdb","srpm_nevra":"gdb-0:10.2-9.el9.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"10.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"rootfiles","nvra":"rootfiles-8.1-31.el9.noarch","release":"31.el9","srpm_name":"rootfiles","srpm_nevra":"rootfiles-0:8.1-31.el9.src","summary":"The basic required files for the root user's directory","version":"8.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"less","nvra":"less-590-1.el9_0.x86_64","release":"1.el9_0","srpm_name":"less","srpm_nevra":"less-0:590-1.el9_0.src","summary":"A text file browser similar to more, but better","version":"590"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"vim-filesystem","nvra":"vim-filesystem-8.2.2637-15.el9.noarch","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"VIM filesystem layout","version":"8.2.2637"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"tcl","nvra":"tcl-8.6.10-6.el9.x86_64","release":"6.el9","srpm_name":"tcl","srpm_nevra":"tcl-1:8.6.10-6.el9.src","summary":"Tool Command Language, pronounced tickle","version":"8.6.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"procps-ng","nvra":"procps-ng-3.3.17-4.el9.x86_64","release":"4.el9","srpm_name":"procps-ng","srpm_nevra":"procps-ng-0:3.3.17-4.el9.src","summary":"System and process monitoring utilities","version":"3.3.17"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libpipeline","nvra":"libpipeline-1.5.3-4.el9.x86_64","release":"4.el9","srpm_name":"libpipeline","srpm_nevra":"libpipeline-0:1.5.3-4.el9.src","summary":"A pipeline manipulation library","version":"1.5.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"groff-base","nvra":"groff-base-1.22.4-10.el9.x86_64","release":"10.el9","srpm_name":"groff","srpm_nevra":"groff-0:1.22.4-10.el9.src","summary":"Parts of the groff formatting system required to display manual pages","version":"1.22.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"man-db","nvra":"man-db-2.9.3-6.el9.x86_64","release":"6.el9","srpm_name":"man-db","srpm_nevra":"man-db-0:2.9.3-6.el9.src","summary":"Tools for searching and reading man pages","version":"2.9.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"environment-modules","nvra":"environment-modules-5.0.1-1.el9.x86_64","release":"1.el9","srpm_name":"environment-modules","srpm_nevra":"environment-modules-0:5.0.1-1.el9.src","summary":"Provides dynamic modification of a user's environment","version":"5.0.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gettext-libs","nvra":"gettext-libs-0.21-7.el9.x86_64","release":"7.el9","srpm_name":"gettext","srpm_nevra":"gettext-0:0.21-7.el9.src","summary":"Libraries for gettext","version":"0.21"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gettext","nvra":"gettext-0.21-7.el9.x86_64","release":"7.el9","srpm_name":"gettext","srpm_nevra":"gettext-0:0.21-7.el9.src","summary":"GNU libraries and utilities for producing multi-lingual messages","version":"0.21"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"scl-utils","nvra":"scl-utils-2.0.3-2.el9.x86_64","release":"2.el9","srpm_name":"scl-utils","srpm_nevra":"scl-utils-1:2.0.3-2.el9.src","summary":"Utilities for alternative packaging","version":"2.0.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc-locale-source","nvra":"glibc-locale-source-2.34-28.el9_0.x86_64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The sources for the locales","version":"2.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"bsdtar","nvra":"bsdtar-3.5.3-1.el9.x86_64","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"Manipulate tape archives","version":"3.5.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"xz","nvra":"xz-5.2.5-7.el9.x86_64","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"LZMA compression utilities","version":"5.2.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"unzip","nvra":"unzip-6.0-56.el9.x86_64","release":"56.el9","srpm_name":"unzip","srpm_nevra":"unzip-0:6.0-56.el9.src","summary":"A utility for unpacking zip files","version":"6.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rsync","nvra":"rsync-3.2.3-9.el9.x86_64","release":"9.el9","srpm_name":"rsync","srpm_nevra":"rsync-0:3.2.3-9.el9.src","summary":"A program for synchronizing files over a network","version":"3.2.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc-langpack-en","nvra":"glibc-langpack-en-2.34-28.el9_0.x86_64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Locale data for English","version":"2.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libxslt","nvra":"libxslt-1.1.34-9.el9.x86_64","release":"9.el9","srpm_name":"libxslt","srpm_nevra":"libxslt-0:1.1.34-9.el9.src","summary":"Library providing the Gnome XSLT engine","version":"1.1.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libtool-ltdl","nvra":"libtool-ltdl-2.4.6-45.el9.x86_64","release":"45.el9","srpm_name":"libtool","srpm_nevra":"libtool-0:2.4.6-45.el9.src","summary":"Runtime libraries for GNU Libtool Dynamic Module Loader","version":"2.4.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cmake-filesystem","nvra":"cmake-filesystem-3.20.2-7.el9.x86_64","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Directories used by CMake modules","version":"3.20.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"apr","nvra":"apr-1.7.0-11.el9.x86_64","release":"11.el9","srpm_name":"apr","srpm_nevra":"apr-0:1.7.0-11.el9.src","summary":"Apache Portable Runtime library","version":"1.7.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"apr-util-bdb","nvra":"apr-util-bdb-1.6.1-20.el9.x86_64","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"APR utility library Berkeley DB driver","version":"1.6.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"apr-util-openssl","nvra":"apr-util-openssl-1.6.1-20.el9.x86_64","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"APR utility library OpenSSL crypto support","version":"1.6.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"apr-util","nvra":"apr-util-1.6.1-20.el9.x86_64","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"Apache Portable Runtime Utility library","version":"1.6.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"xmlsec1","nvra":"xmlsec1-1.2.29-9.el9.x86_64","release":"9.el9","srpm_name":"xmlsec1","srpm_nevra":"xmlsec1-0:1.2.29-9.el9.src","summary":"Library providing support for \"XML Signature\" and \"XML Encryption\" standards","version":"1.2.29"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libuv","nvra":"libuv-1.42.0-1.el9.x86_64","release":"1.el9","srpm_name":"libuv","srpm_nevra":"libuv-1:1.42.0-1.el9.src","summary":"Platform layer for node.js","version":"1.42.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"httpd-filesystem","nvra":"httpd-filesystem-2.4.51-7.el9_0.noarch","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"The basic directory layout for the Apache HTTP Server","version":"2.4.51"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"cmake-rpm-macros","nvra":"cmake-rpm-macros-3.20.2-7.el9.noarch","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Common RPM macros for cmake","version":"3.20.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"protobuf-c","nvra":"protobuf-c-1.3.3-12.el9.x86_64","release":"12.el9","srpm_name":"protobuf-c","srpm_nevra":"protobuf-c-0:1.3.3-12.el9.src","summary":"C bindings for Google's Protocol Buffers","version":"1.3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"lmdb-libs","nvra":"lmdb-libs-0.9.29-3.el9.x86_64","release":"3.el9","srpm_name":"lmdb","srpm_nevra":"lmdb-0:0.9.29-3.el9.src","summary":"Shared libraries for lmdb","version":"0.9.29"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"xmlsec1-openssl","nvra":"xmlsec1-openssl-1.2.29-9.el9.x86_64","release":"9.el9","srpm_name":"xmlsec1","srpm_nevra":"xmlsec1-0:1.2.29-9.el9.src","summary":"OpenSSL crypto plugin for XML Security Library","version":"1.2.29"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"lasso","nvra":"lasso-2.7.0-8.el9.x86_64","release":"8.el9","srpm_name":"lasso","srpm_nevra":"lasso-0:2.7.0-8.el9.src","summary":"Liberty Alliance Single Sign On","version":"2.7.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"httpd-tools","nvra":"httpd-tools-2.4.51-7.el9_0.x86_64","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Tools for use with the Apache HTTP Server","version":"2.4.51"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"redhat-logos-httpd","nvra":"redhat-logos-httpd-90.4-1.el9.noarch","release":"1.el9","srpm_name":"redhat-logos","srpm_nevra":"redhat-logos-0:90.4-1.el9.src","summary":"Red Hat-related icons and pictures used by httpd","version":"90.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libmaxminddb","nvra":"libmaxminddb-1.5.2-3.el9.x86_64","release":"3.el9","srpm_name":"libmaxminddb","srpm_nevra":"libmaxminddb-0:1.5.2-3.el9.src","summary":"C library for the MaxMind DB file format","version":"1.5.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"fstrm","nvra":"fstrm-0.6.1-3.el9.x86_64","release":"3.el9","srpm_name":"fstrm","srpm_nevra":"fstrm-0:0.6.1-3.el9.src","summary":"Frame Streams implementation in C","version":"0.6.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"emacs-filesystem","nvra":"emacs-filesystem-27.2-6.el9.noarch","release":"6.el9","srpm_name":"emacs","srpm_nevra":"emacs-1:27.2-6.el9.src","summary":"Emacs filesystem layout","version":"27.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"bind-license","nvra":"bind-license-9.16.23-1.el9.noarch","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"License of the BIND DNS suite","version":"9.16.23"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"bind-libs","nvra":"bind-libs-9.16.23-1.el9.x86_64","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"Libraries used by the BIND DNS packages","version":"9.16.23"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pkgconf-m4","nvra":"pkgconf-m4-1.7.3-9.el9.noarch","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"m4 macros for pkgconf","version":"1.7.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"ncurses","nvra":"ncurses-6.2-8.20210508.el9.x86_64","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses support utilities","version":"6.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Digest","nvra":"perl-Digest-1.19-4.el9.noarch","release":"4.el9","srpm_name":"perl-Digest","srpm_nevra":"perl-Digest-0:1.19-4.el9.src","summary":"Modules that calculate message digests","version":"1.19"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-Digest-MD5","nvra":"perl-Digest-MD5-2.58-4.el9.x86_64","release":"4.el9","srpm_name":"perl-Digest-MD5","srpm_nevra":"perl-Digest-MD5-0:2.58-4.el9.src","summary":"Perl interface to the MD5 algorithm","version":"2.58"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-B","nvra":"perl-B-1.80-479.el9.x86_64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl compiler backend","version":"1.80"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-FileHandle","nvra":"perl-FileHandle-2.03-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Object methods for file handles","version":"2.03"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-AutoLoader","nvra":"perl-AutoLoader-5.74-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Load subroutines only on demand","version":"5.74"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-Data-Dumper","nvra":"perl-Data-Dumper-2.174-462.el9.x86_64","release":"462.el9","srpm_name":"perl-Data-Dumper","srpm_nevra":"perl-Data-Dumper-0:2.174-462.el9.src","summary":"Stringify perl data structures, suitable for printing and eval","version":"2.174"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-libnet","nvra":"perl-libnet-3.13-4.el9.noarch","release":"4.el9","srpm_name":"perl-libnet","srpm_nevra":"perl-libnet-0:3.13-4.el9.src","summary":"Perl clients for various network protocols","version":"3.13"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-base","nvra":"perl-base-2.27-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Establish an ISA relationship with base classes at compile time","version":"2.27"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-URI","nvra":"perl-URI-5.09-3.el9.noarch","release":"3.el9","srpm_name":"perl-URI","srpm_nevra":"perl-URI-0:5.09-3.el9.src","summary":"A Perl module implementing URI parsing and manipulation","version":"5.09"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-Net-SSLeay","nvra":"perl-Net-SSLeay-1.92-1.el9.x86_64","release":"1.el9","srpm_name":"perl-Net-SSLeay","srpm_nevra":"perl-Net-SSLeay-0:1.92-1.el9.src","summary":"Perl extension for using OpenSSL","version":"1.92"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Mozilla-CA","nvra":"perl-Mozilla-CA-20200520-6.el9.noarch","release":"6.el9","srpm_name":"perl-Mozilla-CA","srpm_nevra":"perl-Mozilla-CA-0:20200520-6.el9.src","summary":"Mozilla's CA certificate bundle in PEM format","version":"20200520"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-if","nvra":"perl-if-0.60.800-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Use a Perl module if a condition holds","version":"0.60.800"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IO-Socket-IP","nvra":"perl-IO-Socket-IP-0.41-5.el9.noarch","release":"5.el9","srpm_name":"perl-IO-Socket-IP","srpm_nevra":"perl-IO-Socket-IP-0:0.41-5.el9.src","summary":"Drop-in replacement for IO::Socket::INET supporting both IPv4 and IPv6","version":"0.41"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Time-Local","nvra":"perl-Time-Local-1.300-7.el9.noarch","release":"7.el9","srpm_name":"perl-Time-Local","srpm_nevra":"perl-Time-Local-2:1.300-7.el9.src","summary":"Efficiently compute time from local and GMT time","version":"1.300"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Path","nvra":"perl-File-Path-2.18-4.el9.noarch","release":"4.el9","srpm_name":"perl-File-Path","srpm_nevra":"perl-File-Path-0:2.18-4.el9.src","summary":"Create or remove directory trees","version":"2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IO-Socket-SSL","nvra":"perl-IO-Socket-SSL-2.073-1.el9.noarch","release":"1.el9","srpm_name":"perl-IO-Socket-SSL","srpm_nevra":"perl-IO-Socket-SSL-0:2.073-1.el9.src","summary":"Perl library for transparent SSL","version":"2.073"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Escapes","nvra":"perl-Pod-Escapes-1.07-460.el9.noarch","release":"460.el9","srpm_name":"perl-Pod-Escapes","srpm_nevra":"perl-Pod-Escapes-1:1.07-460.el9.src","summary":"Resolve POD escape sequences","version":"1.07"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Text-Tabs+Wrap","nvra":"perl-Text-Tabs+Wrap-2013.0523-460.el9.noarch","release":"460.el9","srpm_name":"perl-Text-Tabs+Wrap","srpm_nevra":"perl-Text-Tabs+Wrap-0:2013.0523-460.el9.src","summary":"Expand tabs and do simple line wrapping","version":"2013.0523"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Class-Struct","nvra":"perl-Class-Struct-0.66-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Declare struct-like data types as Perl classes","version":"0.66"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-POSIX","nvra":"perl-POSIX-1.94-479.el9.x86_64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl interface to IEEE Std 1003.1","version":"1.94"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Term-ANSIColor","nvra":"perl-Term-ANSIColor-5.01-461.el9.noarch","release":"461.el9","srpm_name":"perl-Term-ANSIColor","srpm_nevra":"perl-Term-ANSIColor-0:5.01-461.el9.src","summary":"Color screen output using ANSI escape sequences","version":"5.01"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IPC-Open3","nvra":"perl-IPC-Open3-1.21-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Open a process for reading, writing, and error handling","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-subs","nvra":"perl-subs-1.03-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to predeclare subroutine names","version":"1.03"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Temp","nvra":"perl-File-Temp-0.231.100-4.el9.noarch","release":"4.el9","srpm_name":"perl-File-Temp","srpm_nevra":"perl-File-Temp-1:0.231.100-4.el9.src","summary":"Return name and handle of a temporary file safely","version":"0.231.100"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-HTTP-Tiny","nvra":"perl-HTTP-Tiny-0.076-460.el9.noarch","release":"460.el9","srpm_name":"perl-HTTP-Tiny","srpm_nevra":"perl-HTTP-Tiny-0:0.076-460.el9.src","summary":"Small, simple, correct HTTP/1.1 client","version":"0.076"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Simple","nvra":"perl-Pod-Simple-3.42-4.el9.noarch","release":"4.el9","srpm_name":"perl-Pod-Simple","srpm_nevra":"perl-Pod-Simple-1:3.42-4.el9.src","summary":"Framework for parsing POD documentation","version":"3.42"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Term-Cap","nvra":"perl-Term-Cap-1.17-460.el9.noarch","release":"460.el9","srpm_name":"perl-Term-Cap","srpm_nevra":"perl-Term-Cap-0:1.17-460.el9.src","summary":"Perl termcap interface","version":"1.17"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-Socket","nvra":"perl-Socket-2.031-4.el9.x86_64","release":"4.el9","srpm_name":"perl-Socket","srpm_nevra":"perl-Socket-4:2.031-4.el9.src","summary":"Networking constants and support functions","version":"2.031"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-SelectSaver","nvra":"perl-SelectSaver-1.02-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Save and restore selected file handle","version":"1.02"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Symbol","nvra":"perl-Symbol-1.08-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Manipulate Perl symbols and their names","version":"1.08"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-stat","nvra":"perl-File-stat-1.09-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"By-name interface to Perl built-in stat functions","version":"1.09"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Perldoc","nvra":"perl-Pod-Perldoc-3.28.01-461.el9.noarch","release":"461.el9","srpm_name":"perl-Pod-Perldoc","srpm_nevra":"perl-Pod-Perldoc-0:3.28.01-461.el9.src","summary":"Look up Perl documentation in Pod format","version":"3.28.01"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-podlators","nvra":"perl-podlators-4.14-460.el9.noarch","release":"460.el9","srpm_name":"perl-podlators","srpm_nevra":"perl-podlators-1:4.14-460.el9.src","summary":"Format POD source into various output formats","version":"4.14"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-Fcntl","nvra":"perl-Fcntl-1.13-479.el9.x86_64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"File operation options","version":"1.13"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Text-ParseWords","nvra":"perl-Text-ParseWords-3.30-460.el9.noarch","release":"460.el9","srpm_name":"perl-Text-ParseWords","srpm_nevra":"perl-Text-ParseWords-0:3.30-460.el9.src","summary":"Parse text into an array of tokens or array of arrays","version":"3.30"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-mro","nvra":"perl-mro-1.23-479.el9.x86_64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Method resolution order","version":"1.23"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-IO","nvra":"perl-IO-1.43-479.el9.x86_64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl input/output modules","version":"1.43"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-overloading","nvra":"perl-overloading-0.02-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to lexically control overloading","version":"0.02"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Usage","nvra":"perl-Pod-Usage-2.01-4.el9.noarch","release":"4.el9","srpm_name":"perl-Pod-Usage","srpm_nevra":"perl-Pod-Usage-4:2.01-4.el9.src","summary":"Print a usage message from embedded POD documentation","version":"2.01"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-Errno","nvra":"perl-Errno-1.30-479.el9.x86_64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"System errno constants","version":"1.30"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Basename","nvra":"perl-File-Basename-2.85-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Parse file paths into directory, file name, and suffix","version":"2.85"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Getopt-Std","nvra":"perl-Getopt-Std-1.12-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Process single-character switches with switch clustering","version":"1.12"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-MIME-Base64","nvra":"perl-MIME-Base64-3.16-4.el9.x86_64","release":"4.el9","srpm_name":"perl-MIME-Base64","srpm_nevra":"perl-MIME-Base64-0:3.16-4.el9.src","summary":"Encoding and decoding of Base64 and quoted-printable strings","version":"3.16"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-Scalar-List-Utils","nvra":"perl-Scalar-List-Utils-1.56-461.el9.x86_64","release":"461.el9","srpm_name":"perl-Scalar-List-Utils","srpm_nevra":"perl-Scalar-List-Utils-4:1.56-461.el9.src","summary":"A selection of general-utility scalar and list subroutines","version":"1.56"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-constant","nvra":"perl-constant-1.33-461.el9.noarch","release":"461.el9","srpm_name":"perl-constant","srpm_nevra":"perl-constant-0:1.33-461.el9.src","summary":"Perl pragma to declare constants","version":"1.33"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-Storable","nvra":"perl-Storable-3.21-460.el9.x86_64","release":"460.el9","srpm_name":"perl-Storable","srpm_nevra":"perl-Storable-1:3.21-460.el9.src","summary":"Persistence for Perl data structures","version":"3.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-overload","nvra":"perl-overload-1.31-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Overloading Perl operations","version":"1.31"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-parent","nvra":"perl-parent-0.238-460.el9.noarch","release":"460.el9","srpm_name":"perl-parent","srpm_nevra":"perl-parent-1:0.238-460.el9.src","summary":"Establish an ISA relationship with base classes at compile time","version":"0.238"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-vars","nvra":"perl-vars-1.05-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to predeclare global variable names","version":"1.05"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Getopt-Long","nvra":"perl-Getopt-Long-2.52-4.el9.noarch","release":"4.el9","srpm_name":"perl-Getopt-Long","srpm_nevra":"perl-Getopt-Long-1:2.52-4.el9.src","summary":"Extended processing of command line options","version":"2.52"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Carp","nvra":"perl-Carp-1.50-460.el9.noarch","release":"460.el9","srpm_name":"perl-Carp","srpm_nevra":"perl-Carp-0:1.50-460.el9.src","summary":"Alternative warn and die for modules","version":"1.50"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Exporter","nvra":"perl-Exporter-5.74-461.el9.noarch","release":"461.el9","srpm_name":"perl-Exporter","srpm_nevra":"perl-Exporter-0:5.74-461.el9.src","summary":"Implements default import method for modules","version":"5.74"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-NDBM_File","nvra":"perl-NDBM_File-1.15-479.el9.x86_64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Tied access to ndbm files","version":"1.15"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-PathTools","nvra":"perl-PathTools-3.78-461.el9.x86_64","release":"461.el9","srpm_name":"perl-PathTools","srpm_nevra":"perl-PathTools-0:3.78-461.el9.src","summary":"PathTools Perl module (Cwd, File::Spec)","version":"3.78"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-Encode","nvra":"perl-Encode-3.08-462.el9.x86_64","release":"462.el9","srpm_name":"perl-Encode","srpm_nevra":"perl-Encode-4:3.08-462.el9.src","summary":"Character encodings in Perl","version":"3.08"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-libs","nvra":"perl-libs-5.32.1-479.el9.x86_64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"The libraries for the perl run-time","version":"5.32.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"perl-interpreter","nvra":"perl-interpreter-5.32.1-479.el9.x86_64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Standalone executable Perl interpreter","version":"5.32.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"make","nvra":"make-4.3-7.el9.x86_64","release":"7.el9","srpm_name":"make","srpm_nevra":"make-1:4.3-7.el9.src","summary":"A GNU tool which simplifies the build process for users","version":"4.3"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"cmake-data","nvra":"cmake-data-3.20.2-7.el9.noarch","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Common data-files for cmake","version":"3.20.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cmake","nvra":"cmake-3.20.2-7.el9.x86_64","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Cross-platform make system","version":"3.20.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"mailcap","nvra":"mailcap-2.1.49-5.el9.noarch","release":"5.el9","srpm_name":"mailcap","srpm_nevra":"mailcap-0:2.1.49-5.el9.src","summary":"Helper application and MIME type associations for file types","version":"2.1.49"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libtalloc","nvra":"libtalloc-2.3.3-1.el9.x86_64","release":"1.el9","srpm_name":"libtalloc","srpm_nevra":"libtalloc-0:2.3.3-1.el9.src","summary":"The talloc library","version":"2.3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libpkgconf","nvra":"libpkgconf-1.7.3-9.el9.x86_64","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"Backend library for pkgconf","version":"1.7.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pkgconf","nvra":"pkgconf-1.7.3-9.el9.x86_64","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"Package compiler and linker metadata toolkit","version":"1.7.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pkgconf-pkg-config","nvra":"pkgconf-pkg-config-1.7.3-9.el9.x86_64","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"pkgconf shim to provide /usr/bin/pkg-config","version":"1.7.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libpath_utils","nvra":"libpath_utils-0.2.1-51.el9.x86_64","release":"51.el9","srpm_name":"ding-libs","srpm_nevra":"ding-libs-0:0.6.1-51.el9.src","summary":"Filesystem Path Utilities","version":"0.2.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"sscg","nvra":"sscg-3.0.0-5.el9_0.x86_64","release":"5.el9_0","srpm_name":"sscg","srpm_nevra":"sscg-0:3.0.0-5.el9_0.src","summary":"Simple SSL certificate generator","version":"3.0.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libbrotli","nvra":"libbrotli-1.0.9-6.el9.x86_64","release":"6.el9","srpm_name":"brotli","srpm_nevra":"brotli-0:1.0.9-6.el9.src","summary":"Library for brotli lossless compression algorithm","version":"1.0.9"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"mod_http2","nvra":"mod_http2-1.15.19-2.el9.x86_64","release":"2.el9","srpm_name":"mod_http2","srpm_nevra":"mod_http2-0:1.15.19-2.el9.src","summary":"module implementing HTTP/2 for Apache 2","version":"1.15.19"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"mod_lua","nvra":"mod_lua-2.4.51-7.el9_0.x86_64","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Lua scripting support for the Apache HTTP Server","version":"2.4.51"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"httpd","nvra":"httpd-2.4.51-7.el9_0.x86_64","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Apache HTTP Server","version":"2.4.51"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"hostname","nvra":"hostname-3.23-6.el9.x86_64","release":"6.el9","srpm_name":"hostname","srpm_nevra":"hostname-0:3.23-6.el9.src","summary":"Utility to set/show the host name or domain name","version":"3.23"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"mod_ssl","nvra":"mod_ssl-2.4.51-7.el9_0.x86_64","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"SSL/TLS module for the Apache HTTP Server","version":"2.4.51"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"mod_auth_mellon","nvra":"mod_auth_mellon-0.17.0-6.el9.x86_64","release":"6.el9","srpm_name":"mod_auth_mellon","srpm_nevra":"mod_auth_mellon-0:0.17.0-6.el9.src","summary":"A SAML 2.0 authentication module for the Apache Httpd Server","version":"0.17.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"nss_wrapper","nvra":"nss_wrapper-1.1.11-7.el9.x86_64","release":"7.el9","srpm_name":"nss_wrapper","srpm_nevra":"nss_wrapper-0:1.1.11-7.el9.src","summary":"A wrapper for the user, group and hosts NSS API","version":"1.1.11"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"bind-utils","nvra":"bind-utils-9.16.23-1.el9.x86_64","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"Utilities for querying DNS name servers","version":"9.16.23"}],"_links":{"image":{"href":"/v1/images/id/6272a08c4841f16f4f118c5c"}}} +-- catalog.redhat.com/api/containers/v1/images/id/6272a08f4841f16f4f118c60/rpm-manifest -- +{"_id":"6272a0914841f16f4f118c64","creation_date":"2022-05-04T15:49:37.184000+00:00","image_id":"6272a08f4841f16f4f118c60","last_update_date":"2023-07-28T12:47:15.993000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-11.2.1-9.4.el9.ppc64le","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC version 11 shared support library","version":"11.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"System-wide crypto policies","version":"20220223"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2022a-1.el9_0.noarch","release":"1.el9_0","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2022a-1.el9_0.src","summary":"Timezone data","version":"2022a"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.29.26-3.el9_0.ppc64le","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-9.0-2.17.el9.ppc64le","release":"2.17.el9","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:9.0-2.17.el9.src","summary":"Red Hat Enterprise Linux release file","version":"9.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.13.7-6.el9.noarch","release":"6.el9","srpm_name":"setup","srpm_nevra":"setup-0:2.13.7-6.el9.src","summary":"A set of system configuration and setup files","version":"2.13.7"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.16-2.el9.ppc64le","release":"2.el9","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.16-2.el9.src","summary":"The basic directory layout for a Linux system","version":"3.16"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-13.el9.noarch","release":"13.el9","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-13.el9.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools-wheel","nvra":"python3-setuptools-wheel-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"The setuptools wheel","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pcre2-syntax","nvra":"pcre2-syntax-10.37-3.el9.1.noarch","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Documentation for PCRE2 regular expressions","version":"10.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.2-8.20210508.el9.noarch","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Descriptions of common terminals","version":"6.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.34-28.el9_0.ppc64le","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Minimal language packs for glibc.","version":"2.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.34-28.el9_0.ppc64le","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Common binaries and locale data for glibc","version":"2.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.34-28.el9_0.ppc64le","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The GNU libc libraries","version":"2.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.2-8.20210508.el9.ppc64le","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses libraries","version":"6.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-5.1.8-4.el9.ppc64le","release":"4.el9","srpm_name":"bash","srpm_nevra":"bash-0:5.1.8-4.el9.src","summary":"The GNU Bourne Again shell","version":"5.1.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-31.el9_0.1.ppc64le","release":"31.el9_0.1","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-31.el9_0.1.src","summary":"Compression and decompression library","version":"1.2.11"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.5-7.el9.ppc64le","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"Libraries for decoding LZMA compression","version":"5.2.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.8-8.el9.ppc64le","release":"8.el9","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.8-8.el9.src","summary":"Libraries for applications using bzip2","version":"1.0.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libzstd","nvra":"libzstd-1.5.1-2.el9.ppc64le","release":"2.el9","srpm_name":"zstd","srpm_nevra":"zstd-0:1.5.1-2.el9.src","summary":"Zstd shared library","version":"1.5.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.4.18-3.el9.ppc64le","release":"3.el9","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.4.18-3.el9.src","summary":"Extended crypt library for descrypt, md5crypt, bcrypt, and others","version":"4.4.18"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.48-8.el9.ppc64le","release":"8.el9","srpm_name":"libcap","srpm_nevra":"libcap-0:2.48-8.el9.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.48"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.34.1-5.el9.ppc64le","release":"5.el9","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.34.1-5.el9.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.34.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Universally unique ID library","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.18-8.el9.ppc64le","release":"8.el9","srpm_name":"popt","srpm_nevra":"popt-0:1.18-8.el9.src","summary":"C library for parsing command line parameters","version":"1.18"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.4.2-7.el9.ppc64le","release":"7.el9","srpm_name":"libffi","srpm_nevra":"libffi-0:3.4.2-7.el9.src","summary":"A portable foreign function interface library","version":"3.4.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.24.1-2.el9.ppc64le","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.24.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.42-5.el9.ppc64le","release":"5.el9","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.42-5.el9.src","summary":"Library for error values used by GnuPG components","version":"1.42"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.13-1.el9.ppc64le","release":"1.el9","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.13-1.el9.src","summary":"Library providing XML and HTML support","version":"2.9.13"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-8.1-4.el9.ppc64le","release":"4.el9","srpm_name":"readline","srpm_nevra":"readline-0:8.1-4.el9.src","summary":"A library for editing typed command lines","version":"8.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.2.0-10.el9.ppc64le","release":"10.el9","srpm_name":"gmp","srpm_nevra":"gmp-1:6.2.0-10.el9.src","summary":"A GNU arbitrary precision library","version":"6.2.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.14-11.el9.ppc64le","release":"11.el9","srpm_name":"json-c","srpm_nevra":"json-c-0:0.14-11.el9.src","summary":"JSON implementation in C","version":"0.14"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Formatting library for ls-like programs.","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-11.2.1-9.4.el9.ppc64le","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GNU Standard C++ Library","version":"11.2.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.4.2-4.el9.ppc64le","release":"4.el9","srpm_name":"lua","srpm_nevra":"lua-0:5.4.2-4.el9.src","summary":"Libraries for lua","version":"5.4.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.10.0-2.el9.ppc64le","release":"2.el9","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.10.0-2.el9.src","summary":"A general-purpose cryptography library","version":"1.10.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.186-1.el9.ppc64le","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Library to read and write ELF files","version":"0.186"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.39-8.el9.ppc64le","release":"8.el9","srpm_name":"file","srpm_nevra":"file-0:5.39-8.el9.src","summary":"Libraries for applications using libmagic","version":"5.39"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.10-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"expat","srpm_nevra":"expat-0:2.2.10-12.el9_0.src","summary":"An XML parser library","version":"2.2.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.5.1-3.el9.ppc64le","release":"3.el9","srpm_name":"attr","srpm_nevra":"attr-0:2.5.1-3.el9.src","summary":"Dynamic library for extended attribute support","version":"2.5.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.3.1-3.el9.ppc64le","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Dynamic library for access control list support","version":"2.3.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.8.2-7.el9.ppc64le","release":"7.el9","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.8.2-7.el9.src","summary":"Alternate posix capabilities library","version":"0.8.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0.7-101.el9_0.2.ppc64le","release":"101.el9_0.2","srpm_name":"audit","srpm_nevra":"audit-0:3.0.7-101.el9_0.2.src","summary":"Dynamic library for libaudit","version":"3.0.7"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.46.5-2.el9.ppc64le","release":"2.el9","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.46.5-2.el9.src","summary":"Common error description library","version":"1.46.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.9.3-5.el9.ppc64le","release":"5.el9","srpm_name":"lz4","srpm_nevra":"lz4-0:1.9.3-5.el9.src","summary":"Libaries for lz4","version":"1.9.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.5-3.el9.ppc64le","release":"3.el9","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.5-3.el9.src","summary":"GnuPG IPC library","version":"2.5.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.19-4.el9.ppc64le","release":"4.el9","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.19-4.el9.src","summary":"Libraries files for gdbm","version":"1.19"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.6.1-4.el9.ppc64le","release":"4.el9","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.6.1-4.el9.src","summary":"Key utilities library","version":"1.6.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-3.3-2.el9.ppc64le","release":"2.el9","srpm_name":"libsepol","srpm_nevra":"libsepol-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.13-4.el9.ppc64le","release":"4.el9","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.13-4.el9.src","summary":"Library for handling page faults in user mode","version":"2.13"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.16.0-7.el9.ppc64le","release":"7.el9","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.16.0-7.el9.src","summary":"The ASN.1 library used in GNUTLS","version":"4.16.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.10-15.el9.ppc64le","release":"15.el9","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.10-15.el9.src","summary":"GNU Unicode string library","version":"0.9.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.44-3.el9.3.ppc64le","release":"3.el9.3","srpm_name":"pcre","srpm_nevra":"pcre-0:8.44-3.el9.3.src","summary":"Perl-compatible regular expression library","version":"8.44"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.6-5.el9.ppc64le","release":"5.el9","srpm_name":"grep","srpm_nevra":"grep-0:3.6-5.el9.src","summary":"Pattern matching utilities","version":"3.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.37-3.el9.1.ppc64le","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Perl-compatible regular expression library","version":"10.37"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-3.3-2.el9.ppc64le","release":"2.el9","srpm_name":"libselinux","srpm_nevra":"libselinux-0:3.3-2.el9.src","summary":"SELinux library and simple utilities","version":"3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.32-31.el9.ppc64le","release":"31.el9","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.32-31.el9.src","summary":"coreutils multicall binary","version":"8.32"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Block device ID library","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Device mounting library","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.8-9.el9.ppc64le","release":"9.el9","srpm_name":"sed","srpm_nevra":"sed-0:4.8-9.el9.src","summary":"A GNU stream text editor","version":"4.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Partitioning library for fdisk-like programs.","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.10-9.el9_0.ppc64le","release":"9.el9_0","srpm_name":"gzip","srpm_nevra":"gzip-0:1.10-9.el9_0.src","summary":"The GNU data compression program","version":"1.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-27.el9.ppc64le","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cracklib-dicts","nvra":"cracklib-dicts-2.9.6-27.el9.ppc64le","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"The standard CrackLib dictionaries","version":"2.9.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-3.3-2.el9.ppc64le","release":"2.el9","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.9-3.el9.ppc64le","release":"3.el9","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.9-3.el9.src","summary":"Utilities for managing accounts and shadow password files","version":"4.9"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.2.1-6.el9.ppc64le","release":"6.el9","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.2.1-6.el9.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.2.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.3.0-7.el9.ppc64le","release":"7.el9","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.3.0-7.el9.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.3.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.3.1-3.el9.ppc64le","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Access control list utilities","version":"2.3.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.18-1.el9.ppc64le","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Comps XML file manipulation library","version":"0.1.18"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-4.1.0-7.el9.ppc64le","release":"7.el9","srpm_name":"mpfr","srpm_nevra":"mpfr-0:4.1.0-7.el9.src","summary":"C library for multiple-precision floating-point computations","version":"4.1.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-5.1.0-6.el9.ppc64le","release":"6.el9","srpm_name":"gawk","srpm_nevra":"gawk-0:5.1.0-6.el9.src","summary":"The GNU version of the AWK text processing utility","version":"5.1.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.7.3-2.el9.ppc64le","release":"2.el9","srpm_name":"nettle","srpm_nevra":"nettle-0:3.7.3-2.el9.src","summary":"A low-level cryptographic library","version":"3.7.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.5.1-4.el9.ppc64le","release":"4.el9","srpm_name":"libksba","srpm_nevra":"libksba-0:1.5.1-4.el9.src","summary":"CMS and X.509 library","version":"1.5.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"systemd-rpm-macros","nvra":"systemd-rpm-macros-250-6.el9_0.noarch","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"Macros that define paths and scriptlets related to systemd","version":"250"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"alternatives","nvra":"alternatives-1.20-2.el9.ppc64le","release":"2.el9","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.20-2.el9.src","summary":"A tool to maintain symbolic links determining default commands","version":"1.20"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.24.1-2.el9.ppc64le","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"System trust module from p11-kit","version":"0.24.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2020.2.50-94.el9.noarch","release":"94.el9","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2020.2.50-94.el9.src","summary":"The Mozilla CA root certificate bundle","version":"2020.2.50"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-3.0.1-23.el9_0.ppc64le","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"A general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-250-6.el9_0.ppc64le","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd libraries","version":"250"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.7.3-9.el9.ppc64le","release":"9.el9","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.7.3-9.el9.src","summary":"A TLS protocol implementation","version":"3.7.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.68.4-5.el9.ppc64le","release":"5.el9","srpm_name":"glib2","srpm_nevra":"glib2-0:2.68.4-5.el9.src","summary":"A library of handy utility functions","version":"2.68.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.68.0-10.el9.ppc64le","release":"10.el9","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.68.0-10.el9.src","summary":"Introspection system for GObject-based libraries","version":"1.68.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.6.6-1.el9.ppc64le","release":"1.el9","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.6.6-1.el9.src","summary":"Library for JavaScript Object Notation format","version":"1.6.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-7.el9.ppc64le","release":"7.el9","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-7.el9.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.20-5.el9.ppc64le","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"Libraries for accessing D-BUS","version":"1.12.20"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"util-linux-core","nvra":"util-linux-core-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"The most essential utilities from the util-linux suite.","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-28-7.el9.ppc64le","release":"7.el9","srpm_name":"kmod","srpm_nevra":"kmod-0:28-7.el9.src","summary":"Libraries to handle kernel module loading and unloading","version":"28"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.5.3-1.el9.ppc64le","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"A library for handling streaming archive formats","version":"3.5.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"openssl","nvra":"openssl-3.0.1-23.el9_0.ppc64le","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"Utilities from the general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pip-wheel","nvra":"python3-pip-wheel-21.2.3-6.el9.noarch","release":"6.el9","srpm_name":"python-pip","srpm_nevra":"python-pip-0:21.2.3-6.el9.src","summary":"The pip wheel","version":"21.2.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3","nvra":"python3-3.9.10-2.el9.ppc64le","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python 3.9 interpreter","version":"3.9.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.9.10-2.el9.ppc64le","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python runtime libraries","version":"3.9.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.18-2.el9.ppc64le","release":"2.el9","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.18-2.el9.src","summary":"D-Bus bindings for python3","version":"1.2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.15.0-9.el9.noarch","release":"9.el9","srpm_name":"python-six","srpm_nevra":"python-six-0:1.15.0-9.el9.src","summary":"Python 2 and 3 compatibility utilities","version":"1.15.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.8.1-6.el9.noarch","release":"6.el9","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.8.1-6.el9.src","summary":"Powerful extensions to the standard datetime module","version":"2.8.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-45.el9.noarch","release":"45.el9","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-45.el9.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-idna","nvra":"python3-idna-2.10-7.el9.noarch","release":"7.el9","srpm_name":"python-idna","srpm_nevra":"python-idna-0:2.10-7.el9.src","summary":"Internationalized Domain Names in Applications (IDNA)","version":"2.10"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools","nvra":"python3-setuptools-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"Easily build and distribute Python 3 packages","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-25.el9.noarch","release":"25.el9","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-25.el9.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.18-1.el9.ppc64le","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Python 3 bindings for libcomps library","version":"0.1.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-chardet","nvra":"python3-chardet-4.0.0-5.el9.noarch","release":"5.el9","srpm_name":"python-chardet","srpm_nevra":"python-chardet-0:4.0.0-5.el9.src","summary":"Character encoding auto-detection in Python","version":"4.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.4.2-6.el9.noarch","release":"6.el9","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.4.2-6.el9.src","summary":"Module to simplify usage of decorators in python3","version":"4.4.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.40.1-5.el9.ppc64le","release":"5.el9","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.40.1-5.el9.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.40.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pysocks","nvra":"python3-pysocks-1.7.1-12.el9.noarch","release":"12.el9","srpm_name":"python-pysocks","srpm_nevra":"python-pysocks-0:1.7.1-12.el9.src","summary":"A Python SOCKS client module","version":"1.7.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-urllib3","nvra":"python3-urllib3-1.26.5-3.el9.noarch","release":"3.el9","srpm_name":"python-urllib3","srpm_nevra":"python-urllib3-0:1.26.5-3.el9.src","summary":"Python3 HTTP library with thread-safe connection pooling and file post","version":"1.26.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-requests","nvra":"python3-requests-2.25.1-6.el9.noarch","release":"6.el9","srpm_name":"python-requests","srpm_nevra":"python-requests-0:2.25.1-6.el9.src","summary":"HTTP library, written in Python, for human beings","version":"2.25.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-cloud-what","nvra":"python3-cloud-what-1.29.26-3.el9_0.ppc64le","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Python package for detection of public cloud provider","version":"1.29.26"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-53.el9.ppc64le","release":"53.el9","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-53.el9.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libeconf","nvra":"libeconf-0.4.1-2.el9.ppc64le","release":"2.el9","srpm_name":"libeconf","srpm_nevra":"libeconf-0:0.4.1-2.el9.src","summary":"Enhanced config file parser library","version":"0.4.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.4-8.el9.ppc64le","release":"8.el9","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.4-8.el9.src","summary":"A library for password generation and password quality checking","version":"1.4.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.5.1-9.el9.ppc64le","release":"9.el9","srpm_name":"pam","srpm_nevra":"pam-0:1.5.1-9.el9.src","summary":"An extensible library which provides authentication for applications","version":"1.5.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgomp","nvra":"libgomp-11.2.1-9.4.el9.ppc64le","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC OpenMP v4.5 shared support library","version":"11.2.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.43.0-5.el9.ppc64le","release":"5.el9","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.43.0-5.el9.src","summary":"A library implementing the HTTP/2 protocol","version":"1.43.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.5.0-10.el9.ppc64le","release":"10.el9","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.5.0-10.el9.src","summary":"Convenience library for kernel netlink sockets","version":"3.5.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.15-2.el9.ppc64le","release":"2.el9","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.15-2.el9.src","summary":"Python module to interface with ethtool","version":"0.15"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"librtas","nvra":"librtas-2.0.2-14.el9.ppc64le","release":"14.el9","srpm_name":"librtas","srpm_nevra":"librtas-0:2.0.2-14.el9.src","summary":"Libraries to provide access to RTAS calls and RTAS events","version":"2.0.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"A collection of basic system utilities","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.5.2-2.el9.ppc64le","release":"2.el9","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.5.2-2.el9.src","summary":"Enhanced seccomp library","version":"2.5.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.183-4.el9.ppc64le","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device mapper utility","version":"1.02.183"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.183-4.el9.ppc64le","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device-mapper shared library","version":"1.02.183"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.4.3-4.el9.ppc64le","release":"4.el9","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.4.3-4.el9.src","summary":"Cryptsetup shared library","version":"2.4.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.20-5.el9.ppc64le","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus","version":"1.12.20"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-250-6.el9_0.ppc64le","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd PAM module","version":"250"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-250-6.el9_0.ppc64le","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"System and Service Manager","version":"250"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.20-5.el9.noarch","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus configuration","version":"1.12.20"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus-broker","nvra":"dbus-broker-28-5.el9.ppc64le","release":"5.el9","srpm_name":"dbus-broker","srpm_nevra":"dbus-broker-0:28-5.el9.src","summary":"Linux D-Bus Message Broker","version":"28"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.186-1.el9.noarch","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Default yama attach scope sysctl setting","version":"0.186"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.186-1.el9.ppc64le","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Libraries to handle compiled objects","version":"0.186"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.2-3.el9.ppc64le","release":"3.el9","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.2-3.el9.src","summary":"Main loop abstraction library","version":"0.3.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.19.1-15.el9_0.ppc64le","release":"15.el9_0","srpm_name":"krb5","srpm_nevra":"krb5-0:1.19.1-15.el9_0.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.19.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcurl-minimal","nvra":"libcurl-minimal-7.76.1-14.el9.ppc64le","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of libcurl for minimal installations","version":"7.76.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"curl-minimal","nvra":"curl-minimal-7.76.1-14.el9.ppc64le","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of curl for minimal installations","version":"7.76.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.16.1.3-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"The RPM package management system","version":"4.16.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.16.1.3-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for manipulating RPM packages","version":"4.16.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.7.20-2.el9.ppc64le","release":"2.el9","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.7.20-2.el9.src","summary":"Package dependency solver","version":"0.7.20"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.16.1.3-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for building RPM packages","version":"4.16.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"tpm2-tss","nvra":"tpm2-tss-3.0.3-7.el9.ppc64le","release":"7.el9","srpm_name":"tpm2-tss","srpm_nevra":"tpm2-tss-0:3.0.3-7.el9.src","summary":"TPM2.0 Software Stack","version":"3.0.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.4-4.el9.ppc64le","release":"4.el9","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.4-4.el9.src","summary":"IMA/EVM support utilities","version":"1.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-20.el9.ppc64le","release":"20.el9","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-20.el9.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.59-4.el9_0.ppc64le","release":"4.el9_0","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.59-4.el9_0.src","summary":"LDAP support libraries","version":"2.4.59"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.63-10.el9.ppc64le","release":"10.el9","srpm_name":"libuser","srpm_nevra":"libuser-0:0.63-10.el9.src","summary":"A user and group account administration library","version":"0.63"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-12.el9.ppc64le","release":"12.el9","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-12.el9.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.114-4.el9.ppc64le","release":"4.el9","srpm_name":"usermode","srpm_nevra":"usermode-0:1.114-4.el9.src","summary":"Tools for certain user account management tasks","version":"1.114"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.2.5-7.el9.ppc64le","release":"7.el9","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.2.5-7.el9.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.2.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libmodulemd","nvra":"libmodulemd-2.13.0-2.el9.ppc64le","release":"2.el9","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.13.0-2.el9.src","summary":"Module metadata manipulation library","version":"2.13.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.6-8.el9.ppc64le","release":"8.el9","srpm_name":"npth","srpm_nevra":"npth-0:1.6-8.el9.src","summary":"The New GNU Portable Threads library","version":"1.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.3.3-1.el9.ppc64le","release":"1.el9","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.3.3-1.el9.src","summary":"Utility for secure communication and data storage","version":"2.3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.15.1-6.el9.ppc64le","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.15.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.14.2-1.el9.ppc64le","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Repodata downloading library","version":"1.14.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.65.0-5.el9_0.ppc64le","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.65.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.65.0-5.el9_0.ppc64le","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.65.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.65.0-5.el9_0.ppc64le","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.65.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.14.2-1.el9.ppc64le","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Python 3 bindings for the librepo library","version":"1.14.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.15.1-6.el9.ppc64le","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"gpgme bindings for Python 3","version":"1.15.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm-sign-libs","nvra":"rpm-sign-libs-4.16.1.3-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for signing RPM packages","version":"4.16.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.16.1.3-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.16.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.29.26-3.el9_0.ppc64le","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-27.el9.ppc64le","release":"27.el9","srpm_name":"which","srpm_nevra":"which-0:2.21-27.el9.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.21-2.el9.2.ppc64le","release":"2.el9.2","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.21-2.el9.2.src","summary":"Detect if we are running in a virtual machine","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.15.2-6.el9.noarch","release":"6.el9","srpm_name":"libreport","srpm_nevra":"libreport-0:2.15.2-6.el9.src","summary":"Filesystem layout for libreport","version":"2.15.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Common data and configuration files for DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Python 3 interface to DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libdnf-plugin-subscription-manager","nvra":"libdnf-plugin-subscription-manager-1.29.26-3.el9_0.ppc64le","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Subscription Manager plugin for libdnf","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.24-4.el9_0.noarch","release":"4.el9_0","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.24-4.el9_0.src","summary":"Core Plugins for DNF","version":"4.0.24"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"fonts-filesystem","nvra":"fonts-filesystem-2.0.5-7.el9.1.noarch","release":"7.el9.1","srpm_name":"fonts-rpm-macros","srpm_nevra":"fonts-rpm-macros-1:2.0.5-7.el9.1.src","summary":"Directories used by font packages","version":"2.0.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dejavu-sans-fonts","nvra":"dejavu-sans-fonts-2.37-18.el9.noarch","release":"18.el9","srpm_name":"dejavu-fonts","srpm_nevra":"dejavu-fonts-0:2.37-18.el9.src","summary":"DejaVu Sans, a variable-width sans-serif font family","version":"2.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-font-en","nvra":"langpacks-core-font-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English core font meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-en","nvra":"langpacks-core-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks core meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks meta-package","version":"3.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.29.26-3.el9_0.ppc64le","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Tools and libraries for subscription and repository management","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies-scripts","nvra":"crypto-policies-scripts-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"Tool to switch between crypto policies","version":"20220223"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.8.0-5.el9.ppc64le","release":"5.el9","srpm_name":"findutils","srpm_nevra":"findutils-1:4.8.0-5.el9.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.8.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.34-3.el9.ppc64le","release":"3.el9","srpm_name":"tar","srpm_nevra":"tar-2:1.34-3.el9.src","summary":"GNU file archiving program","version":"1.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.2.2637-15.el9.ppc64le","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"A minimal version of the VIM editor","version":"8.2.2637"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-10.2-9.el9.ppc64le","release":"9.el9","srpm_name":"gdb","srpm_nevra":"gdb-0:10.2-9.el9.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"10.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"rootfiles","nvra":"rootfiles-8.1-31.el9.noarch","release":"31.el9","srpm_name":"rootfiles","srpm_nevra":"rootfiles-0:8.1-31.el9.src","summary":"The basic required files for the root user's directory","version":"8.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"less","nvra":"less-590-1.el9_0.ppc64le","release":"1.el9_0","srpm_name":"less","srpm_nevra":"less-0:590-1.el9_0.src","summary":"A text file browser similar to more, but better","version":"590"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"vim-filesystem","nvra":"vim-filesystem-8.2.2637-15.el9.noarch","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"VIM filesystem layout","version":"8.2.2637"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"tcl","nvra":"tcl-8.6.10-6.el9.ppc64le","release":"6.el9","srpm_name":"tcl","srpm_nevra":"tcl-1:8.6.10-6.el9.src","summary":"Tool Command Language, pronounced tickle","version":"8.6.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"procps-ng","nvra":"procps-ng-3.3.17-4.el9.ppc64le","release":"4.el9","srpm_name":"procps-ng","srpm_nevra":"procps-ng-0:3.3.17-4.el9.src","summary":"System and process monitoring utilities","version":"3.3.17"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libpipeline","nvra":"libpipeline-1.5.3-4.el9.ppc64le","release":"4.el9","srpm_name":"libpipeline","srpm_nevra":"libpipeline-0:1.5.3-4.el9.src","summary":"A pipeline manipulation library","version":"1.5.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"groff-base","nvra":"groff-base-1.22.4-10.el9.ppc64le","release":"10.el9","srpm_name":"groff","srpm_nevra":"groff-0:1.22.4-10.el9.src","summary":"Parts of the groff formatting system required to display manual pages","version":"1.22.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"man-db","nvra":"man-db-2.9.3-6.el9.ppc64le","release":"6.el9","srpm_name":"man-db","srpm_nevra":"man-db-0:2.9.3-6.el9.src","summary":"Tools for searching and reading man pages","version":"2.9.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"environment-modules","nvra":"environment-modules-5.0.1-1.el9.ppc64le","release":"1.el9","srpm_name":"environment-modules","srpm_nevra":"environment-modules-0:5.0.1-1.el9.src","summary":"Provides dynamic modification of a user's environment","version":"5.0.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gettext-libs","nvra":"gettext-libs-0.21-7.el9.ppc64le","release":"7.el9","srpm_name":"gettext","srpm_nevra":"gettext-0:0.21-7.el9.src","summary":"Libraries for gettext","version":"0.21"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gettext","nvra":"gettext-0.21-7.el9.ppc64le","release":"7.el9","srpm_name":"gettext","srpm_nevra":"gettext-0:0.21-7.el9.src","summary":"GNU libraries and utilities for producing multi-lingual messages","version":"0.21"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"scl-utils","nvra":"scl-utils-2.0.3-2.el9.ppc64le","release":"2.el9","srpm_name":"scl-utils","srpm_nevra":"scl-utils-1:2.0.3-2.el9.src","summary":"Utilities for alternative packaging","version":"2.0.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc-locale-source","nvra":"glibc-locale-source-2.34-28.el9_0.ppc64le","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The sources for the locales","version":"2.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"bsdtar","nvra":"bsdtar-3.5.3-1.el9.ppc64le","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"Manipulate tape archives","version":"3.5.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"xz","nvra":"xz-5.2.5-7.el9.ppc64le","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"LZMA compression utilities","version":"5.2.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"unzip","nvra":"unzip-6.0-56.el9.ppc64le","release":"56.el9","srpm_name":"unzip","srpm_nevra":"unzip-0:6.0-56.el9.src","summary":"A utility for unpacking zip files","version":"6.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rsync","nvra":"rsync-3.2.3-9.el9.ppc64le","release":"9.el9","srpm_name":"rsync","srpm_nevra":"rsync-0:3.2.3-9.el9.src","summary":"A program for synchronizing files over a network","version":"3.2.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc-langpack-en","nvra":"glibc-langpack-en-2.34-28.el9_0.ppc64le","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Locale data for English","version":"2.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libxslt","nvra":"libxslt-1.1.34-9.el9.ppc64le","release":"9.el9","srpm_name":"libxslt","srpm_nevra":"libxslt-0:1.1.34-9.el9.src","summary":"Library providing the Gnome XSLT engine","version":"1.1.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libtool-ltdl","nvra":"libtool-ltdl-2.4.6-45.el9.ppc64le","release":"45.el9","srpm_name":"libtool","srpm_nevra":"libtool-0:2.4.6-45.el9.src","summary":"Runtime libraries for GNU Libtool Dynamic Module Loader","version":"2.4.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cmake-filesystem","nvra":"cmake-filesystem-3.20.2-7.el9.ppc64le","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Directories used by CMake modules","version":"3.20.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"apr","nvra":"apr-1.7.0-11.el9.ppc64le","release":"11.el9","srpm_name":"apr","srpm_nevra":"apr-0:1.7.0-11.el9.src","summary":"Apache Portable Runtime library","version":"1.7.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"apr-util-bdb","nvra":"apr-util-bdb-1.6.1-20.el9.ppc64le","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"APR utility library Berkeley DB driver","version":"1.6.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"apr-util-openssl","nvra":"apr-util-openssl-1.6.1-20.el9.ppc64le","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"APR utility library OpenSSL crypto support","version":"1.6.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"apr-util","nvra":"apr-util-1.6.1-20.el9.ppc64le","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"Apache Portable Runtime Utility library","version":"1.6.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"xmlsec1","nvra":"xmlsec1-1.2.29-9.el9.ppc64le","release":"9.el9","srpm_name":"xmlsec1","srpm_nevra":"xmlsec1-0:1.2.29-9.el9.src","summary":"Library providing support for \"XML Signature\" and \"XML Encryption\" standards","version":"1.2.29"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libuv","nvra":"libuv-1.42.0-1.el9.ppc64le","release":"1.el9","srpm_name":"libuv","srpm_nevra":"libuv-1:1.42.0-1.el9.src","summary":"Platform layer for node.js","version":"1.42.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"httpd-filesystem","nvra":"httpd-filesystem-2.4.51-7.el9_0.noarch","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"The basic directory layout for the Apache HTTP Server","version":"2.4.51"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"cmake-rpm-macros","nvra":"cmake-rpm-macros-3.20.2-7.el9.noarch","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Common RPM macros for cmake","version":"3.20.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"protobuf-c","nvra":"protobuf-c-1.3.3-12.el9.ppc64le","release":"12.el9","srpm_name":"protobuf-c","srpm_nevra":"protobuf-c-0:1.3.3-12.el9.src","summary":"C bindings for Google's Protocol Buffers","version":"1.3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"lmdb-libs","nvra":"lmdb-libs-0.9.29-3.el9.ppc64le","release":"3.el9","srpm_name":"lmdb","srpm_nevra":"lmdb-0:0.9.29-3.el9.src","summary":"Shared libraries for lmdb","version":"0.9.29"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"xmlsec1-openssl","nvra":"xmlsec1-openssl-1.2.29-9.el9.ppc64le","release":"9.el9","srpm_name":"xmlsec1","srpm_nevra":"xmlsec1-0:1.2.29-9.el9.src","summary":"OpenSSL crypto plugin for XML Security Library","version":"1.2.29"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"lasso","nvra":"lasso-2.7.0-8.el9.ppc64le","release":"8.el9","srpm_name":"lasso","srpm_nevra":"lasso-0:2.7.0-8.el9.src","summary":"Liberty Alliance Single Sign On","version":"2.7.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"httpd-tools","nvra":"httpd-tools-2.4.51-7.el9_0.ppc64le","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Tools for use with the Apache HTTP Server","version":"2.4.51"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"redhat-logos-httpd","nvra":"redhat-logos-httpd-90.4-1.el9.noarch","release":"1.el9","srpm_name":"redhat-logos","srpm_nevra":"redhat-logos-0:90.4-1.el9.src","summary":"Red Hat-related icons and pictures used by httpd","version":"90.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libmaxminddb","nvra":"libmaxminddb-1.5.2-3.el9.ppc64le","release":"3.el9","srpm_name":"libmaxminddb","srpm_nevra":"libmaxminddb-0:1.5.2-3.el9.src","summary":"C library for the MaxMind DB file format","version":"1.5.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"fstrm","nvra":"fstrm-0.6.1-3.el9.ppc64le","release":"3.el9","srpm_name":"fstrm","srpm_nevra":"fstrm-0:0.6.1-3.el9.src","summary":"Frame Streams implementation in C","version":"0.6.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"emacs-filesystem","nvra":"emacs-filesystem-27.2-6.el9.noarch","release":"6.el9","srpm_name":"emacs","srpm_nevra":"emacs-1:27.2-6.el9.src","summary":"Emacs filesystem layout","version":"27.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"bind-license","nvra":"bind-license-9.16.23-1.el9.noarch","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"License of the BIND DNS suite","version":"9.16.23"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"bind-libs","nvra":"bind-libs-9.16.23-1.el9.ppc64le","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"Libraries used by the BIND DNS packages","version":"9.16.23"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pkgconf-m4","nvra":"pkgconf-m4-1.7.3-9.el9.noarch","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"m4 macros for pkgconf","version":"1.7.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"ncurses","nvra":"ncurses-6.2-8.20210508.el9.ppc64le","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses support utilities","version":"6.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Digest","nvra":"perl-Digest-1.19-4.el9.noarch","release":"4.el9","srpm_name":"perl-Digest","srpm_nevra":"perl-Digest-0:1.19-4.el9.src","summary":"Modules that calculate message digests","version":"1.19"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-Digest-MD5","nvra":"perl-Digest-MD5-2.58-4.el9.ppc64le","release":"4.el9","srpm_name":"perl-Digest-MD5","srpm_nevra":"perl-Digest-MD5-0:2.58-4.el9.src","summary":"Perl interface to the MD5 algorithm","version":"2.58"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-B","nvra":"perl-B-1.80-479.el9.ppc64le","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl compiler backend","version":"1.80"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-FileHandle","nvra":"perl-FileHandle-2.03-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Object methods for file handles","version":"2.03"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-AutoLoader","nvra":"perl-AutoLoader-5.74-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Load subroutines only on demand","version":"5.74"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-Data-Dumper","nvra":"perl-Data-Dumper-2.174-462.el9.ppc64le","release":"462.el9","srpm_name":"perl-Data-Dumper","srpm_nevra":"perl-Data-Dumper-0:2.174-462.el9.src","summary":"Stringify perl data structures, suitable for printing and eval","version":"2.174"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-libnet","nvra":"perl-libnet-3.13-4.el9.noarch","release":"4.el9","srpm_name":"perl-libnet","srpm_nevra":"perl-libnet-0:3.13-4.el9.src","summary":"Perl clients for various network protocols","version":"3.13"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-base","nvra":"perl-base-2.27-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Establish an ISA relationship with base classes at compile time","version":"2.27"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-URI","nvra":"perl-URI-5.09-3.el9.noarch","release":"3.el9","srpm_name":"perl-URI","srpm_nevra":"perl-URI-0:5.09-3.el9.src","summary":"A Perl module implementing URI parsing and manipulation","version":"5.09"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-Net-SSLeay","nvra":"perl-Net-SSLeay-1.92-1.el9.ppc64le","release":"1.el9","srpm_name":"perl-Net-SSLeay","srpm_nevra":"perl-Net-SSLeay-0:1.92-1.el9.src","summary":"Perl extension for using OpenSSL","version":"1.92"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Mozilla-CA","nvra":"perl-Mozilla-CA-20200520-6.el9.noarch","release":"6.el9","srpm_name":"perl-Mozilla-CA","srpm_nevra":"perl-Mozilla-CA-0:20200520-6.el9.src","summary":"Mozilla's CA certificate bundle in PEM format","version":"20200520"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-if","nvra":"perl-if-0.60.800-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Use a Perl module if a condition holds","version":"0.60.800"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IO-Socket-IP","nvra":"perl-IO-Socket-IP-0.41-5.el9.noarch","release":"5.el9","srpm_name":"perl-IO-Socket-IP","srpm_nevra":"perl-IO-Socket-IP-0:0.41-5.el9.src","summary":"Drop-in replacement for IO::Socket::INET supporting both IPv4 and IPv6","version":"0.41"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Time-Local","nvra":"perl-Time-Local-1.300-7.el9.noarch","release":"7.el9","srpm_name":"perl-Time-Local","srpm_nevra":"perl-Time-Local-2:1.300-7.el9.src","summary":"Efficiently compute time from local and GMT time","version":"1.300"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Path","nvra":"perl-File-Path-2.18-4.el9.noarch","release":"4.el9","srpm_name":"perl-File-Path","srpm_nevra":"perl-File-Path-0:2.18-4.el9.src","summary":"Create or remove directory trees","version":"2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IO-Socket-SSL","nvra":"perl-IO-Socket-SSL-2.073-1.el9.noarch","release":"1.el9","srpm_name":"perl-IO-Socket-SSL","srpm_nevra":"perl-IO-Socket-SSL-0:2.073-1.el9.src","summary":"Perl library for transparent SSL","version":"2.073"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Escapes","nvra":"perl-Pod-Escapes-1.07-460.el9.noarch","release":"460.el9","srpm_name":"perl-Pod-Escapes","srpm_nevra":"perl-Pod-Escapes-1:1.07-460.el9.src","summary":"Resolve POD escape sequences","version":"1.07"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Text-Tabs+Wrap","nvra":"perl-Text-Tabs+Wrap-2013.0523-460.el9.noarch","release":"460.el9","srpm_name":"perl-Text-Tabs+Wrap","srpm_nevra":"perl-Text-Tabs+Wrap-0:2013.0523-460.el9.src","summary":"Expand tabs and do simple line wrapping","version":"2013.0523"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Class-Struct","nvra":"perl-Class-Struct-0.66-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Declare struct-like data types as Perl classes","version":"0.66"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-POSIX","nvra":"perl-POSIX-1.94-479.el9.ppc64le","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl interface to IEEE Std 1003.1","version":"1.94"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Term-ANSIColor","nvra":"perl-Term-ANSIColor-5.01-461.el9.noarch","release":"461.el9","srpm_name":"perl-Term-ANSIColor","srpm_nevra":"perl-Term-ANSIColor-0:5.01-461.el9.src","summary":"Color screen output using ANSI escape sequences","version":"5.01"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IPC-Open3","nvra":"perl-IPC-Open3-1.21-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Open a process for reading, writing, and error handling","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-subs","nvra":"perl-subs-1.03-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to predeclare subroutine names","version":"1.03"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Temp","nvra":"perl-File-Temp-0.231.100-4.el9.noarch","release":"4.el9","srpm_name":"perl-File-Temp","srpm_nevra":"perl-File-Temp-1:0.231.100-4.el9.src","summary":"Return name and handle of a temporary file safely","version":"0.231.100"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-HTTP-Tiny","nvra":"perl-HTTP-Tiny-0.076-460.el9.noarch","release":"460.el9","srpm_name":"perl-HTTP-Tiny","srpm_nevra":"perl-HTTP-Tiny-0:0.076-460.el9.src","summary":"Small, simple, correct HTTP/1.1 client","version":"0.076"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Simple","nvra":"perl-Pod-Simple-3.42-4.el9.noarch","release":"4.el9","srpm_name":"perl-Pod-Simple","srpm_nevra":"perl-Pod-Simple-1:3.42-4.el9.src","summary":"Framework for parsing POD documentation","version":"3.42"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Term-Cap","nvra":"perl-Term-Cap-1.17-460.el9.noarch","release":"460.el9","srpm_name":"perl-Term-Cap","srpm_nevra":"perl-Term-Cap-0:1.17-460.el9.src","summary":"Perl termcap interface","version":"1.17"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-Socket","nvra":"perl-Socket-2.031-4.el9.ppc64le","release":"4.el9","srpm_name":"perl-Socket","srpm_nevra":"perl-Socket-4:2.031-4.el9.src","summary":"Networking constants and support functions","version":"2.031"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-SelectSaver","nvra":"perl-SelectSaver-1.02-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Save and restore selected file handle","version":"1.02"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Symbol","nvra":"perl-Symbol-1.08-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Manipulate Perl symbols and their names","version":"1.08"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-stat","nvra":"perl-File-stat-1.09-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"By-name interface to Perl built-in stat functions","version":"1.09"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Perldoc","nvra":"perl-Pod-Perldoc-3.28.01-461.el9.noarch","release":"461.el9","srpm_name":"perl-Pod-Perldoc","srpm_nevra":"perl-Pod-Perldoc-0:3.28.01-461.el9.src","summary":"Look up Perl documentation in Pod format","version":"3.28.01"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-podlators","nvra":"perl-podlators-4.14-460.el9.noarch","release":"460.el9","srpm_name":"perl-podlators","srpm_nevra":"perl-podlators-1:4.14-460.el9.src","summary":"Format POD source into various output formats","version":"4.14"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-Fcntl","nvra":"perl-Fcntl-1.13-479.el9.ppc64le","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"File operation options","version":"1.13"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Text-ParseWords","nvra":"perl-Text-ParseWords-3.30-460.el9.noarch","release":"460.el9","srpm_name":"perl-Text-ParseWords","srpm_nevra":"perl-Text-ParseWords-0:3.30-460.el9.src","summary":"Parse text into an array of tokens or array of arrays","version":"3.30"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-mro","nvra":"perl-mro-1.23-479.el9.ppc64le","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Method resolution order","version":"1.23"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-IO","nvra":"perl-IO-1.43-479.el9.ppc64le","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl input/output modules","version":"1.43"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-overloading","nvra":"perl-overloading-0.02-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to lexically control overloading","version":"0.02"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Usage","nvra":"perl-Pod-Usage-2.01-4.el9.noarch","release":"4.el9","srpm_name":"perl-Pod-Usage","srpm_nevra":"perl-Pod-Usage-4:2.01-4.el9.src","summary":"Print a usage message from embedded POD documentation","version":"2.01"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-Errno","nvra":"perl-Errno-1.30-479.el9.ppc64le","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"System errno constants","version":"1.30"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Basename","nvra":"perl-File-Basename-2.85-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Parse file paths into directory, file name, and suffix","version":"2.85"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Getopt-Std","nvra":"perl-Getopt-Std-1.12-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Process single-character switches with switch clustering","version":"1.12"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-MIME-Base64","nvra":"perl-MIME-Base64-3.16-4.el9.ppc64le","release":"4.el9","srpm_name":"perl-MIME-Base64","srpm_nevra":"perl-MIME-Base64-0:3.16-4.el9.src","summary":"Encoding and decoding of Base64 and quoted-printable strings","version":"3.16"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-Scalar-List-Utils","nvra":"perl-Scalar-List-Utils-1.56-461.el9.ppc64le","release":"461.el9","srpm_name":"perl-Scalar-List-Utils","srpm_nevra":"perl-Scalar-List-Utils-4:1.56-461.el9.src","summary":"A selection of general-utility scalar and list subroutines","version":"1.56"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-constant","nvra":"perl-constant-1.33-461.el9.noarch","release":"461.el9","srpm_name":"perl-constant","srpm_nevra":"perl-constant-0:1.33-461.el9.src","summary":"Perl pragma to declare constants","version":"1.33"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-Storable","nvra":"perl-Storable-3.21-460.el9.ppc64le","release":"460.el9","srpm_name":"perl-Storable","srpm_nevra":"perl-Storable-1:3.21-460.el9.src","summary":"Persistence for Perl data structures","version":"3.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-overload","nvra":"perl-overload-1.31-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Overloading Perl operations","version":"1.31"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-parent","nvra":"perl-parent-0.238-460.el9.noarch","release":"460.el9","srpm_name":"perl-parent","srpm_nevra":"perl-parent-1:0.238-460.el9.src","summary":"Establish an ISA relationship with base classes at compile time","version":"0.238"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-vars","nvra":"perl-vars-1.05-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to predeclare global variable names","version":"1.05"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Getopt-Long","nvra":"perl-Getopt-Long-2.52-4.el9.noarch","release":"4.el9","srpm_name":"perl-Getopt-Long","srpm_nevra":"perl-Getopt-Long-1:2.52-4.el9.src","summary":"Extended processing of command line options","version":"2.52"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Carp","nvra":"perl-Carp-1.50-460.el9.noarch","release":"460.el9","srpm_name":"perl-Carp","srpm_nevra":"perl-Carp-0:1.50-460.el9.src","summary":"Alternative warn and die for modules","version":"1.50"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Exporter","nvra":"perl-Exporter-5.74-461.el9.noarch","release":"461.el9","srpm_name":"perl-Exporter","srpm_nevra":"perl-Exporter-0:5.74-461.el9.src","summary":"Implements default import method for modules","version":"5.74"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-NDBM_File","nvra":"perl-NDBM_File-1.15-479.el9.ppc64le","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Tied access to ndbm files","version":"1.15"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-PathTools","nvra":"perl-PathTools-3.78-461.el9.ppc64le","release":"461.el9","srpm_name":"perl-PathTools","srpm_nevra":"perl-PathTools-0:3.78-461.el9.src","summary":"PathTools Perl module (Cwd, File::Spec)","version":"3.78"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-Encode","nvra":"perl-Encode-3.08-462.el9.ppc64le","release":"462.el9","srpm_name":"perl-Encode","srpm_nevra":"perl-Encode-4:3.08-462.el9.src","summary":"Character encodings in Perl","version":"3.08"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-libs","nvra":"perl-libs-5.32.1-479.el9.ppc64le","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"The libraries for the perl run-time","version":"5.32.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"perl-interpreter","nvra":"perl-interpreter-5.32.1-479.el9.ppc64le","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Standalone executable Perl interpreter","version":"5.32.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"make","nvra":"make-4.3-7.el9.ppc64le","release":"7.el9","srpm_name":"make","srpm_nevra":"make-1:4.3-7.el9.src","summary":"A GNU tool which simplifies the build process for users","version":"4.3"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"cmake-data","nvra":"cmake-data-3.20.2-7.el9.noarch","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Common data-files for cmake","version":"3.20.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cmake","nvra":"cmake-3.20.2-7.el9.ppc64le","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Cross-platform make system","version":"3.20.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"mailcap","nvra":"mailcap-2.1.49-5.el9.noarch","release":"5.el9","srpm_name":"mailcap","srpm_nevra":"mailcap-0:2.1.49-5.el9.src","summary":"Helper application and MIME type associations for file types","version":"2.1.49"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libtalloc","nvra":"libtalloc-2.3.3-1.el9.ppc64le","release":"1.el9","srpm_name":"libtalloc","srpm_nevra":"libtalloc-0:2.3.3-1.el9.src","summary":"The talloc library","version":"2.3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libpkgconf","nvra":"libpkgconf-1.7.3-9.el9.ppc64le","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"Backend library for pkgconf","version":"1.7.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pkgconf","nvra":"pkgconf-1.7.3-9.el9.ppc64le","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"Package compiler and linker metadata toolkit","version":"1.7.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pkgconf-pkg-config","nvra":"pkgconf-pkg-config-1.7.3-9.el9.ppc64le","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"pkgconf shim to provide /usr/bin/pkg-config","version":"1.7.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libpath_utils","nvra":"libpath_utils-0.2.1-51.el9.ppc64le","release":"51.el9","srpm_name":"ding-libs","srpm_nevra":"ding-libs-0:0.6.1-51.el9.src","summary":"Filesystem Path Utilities","version":"0.2.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"sscg","nvra":"sscg-3.0.0-5.el9_0.ppc64le","release":"5.el9_0","srpm_name":"sscg","srpm_nevra":"sscg-0:3.0.0-5.el9_0.src","summary":"Simple SSL certificate generator","version":"3.0.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libbrotli","nvra":"libbrotli-1.0.9-6.el9.ppc64le","release":"6.el9","srpm_name":"brotli","srpm_nevra":"brotli-0:1.0.9-6.el9.src","summary":"Library for brotli lossless compression algorithm","version":"1.0.9"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"mod_http2","nvra":"mod_http2-1.15.19-2.el9.ppc64le","release":"2.el9","srpm_name":"mod_http2","srpm_nevra":"mod_http2-0:1.15.19-2.el9.src","summary":"module implementing HTTP/2 for Apache 2","version":"1.15.19"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"mod_lua","nvra":"mod_lua-2.4.51-7.el9_0.ppc64le","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Lua scripting support for the Apache HTTP Server","version":"2.4.51"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"httpd","nvra":"httpd-2.4.51-7.el9_0.ppc64le","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Apache HTTP Server","version":"2.4.51"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"hostname","nvra":"hostname-3.23-6.el9.ppc64le","release":"6.el9","srpm_name":"hostname","srpm_nevra":"hostname-0:3.23-6.el9.src","summary":"Utility to set/show the host name or domain name","version":"3.23"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"mod_ssl","nvra":"mod_ssl-2.4.51-7.el9_0.ppc64le","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"SSL/TLS module for the Apache HTTP Server","version":"2.4.51"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"mod_auth_mellon","nvra":"mod_auth_mellon-0.17.0-6.el9.ppc64le","release":"6.el9","srpm_name":"mod_auth_mellon","srpm_nevra":"mod_auth_mellon-0:0.17.0-6.el9.src","summary":"A SAML 2.0 authentication module for the Apache Httpd Server","version":"0.17.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"nss_wrapper","nvra":"nss_wrapper-1.1.11-7.el9.ppc64le","release":"7.el9","srpm_name":"nss_wrapper","srpm_nevra":"nss_wrapper-0:1.1.11-7.el9.src","summary":"A wrapper for the user, group and hosts NSS API","version":"1.1.11"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"bind-utils","nvra":"bind-utils-9.16.23-1.el9.ppc64le","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"Utilities for querying DNS name servers","version":"9.16.23"}],"_links":{"image":{"href":"/v1/images/id/6272a08f4841f16f4f118c60"}}} +-- catalog.redhat.com/api/containers/v1/images/id/6272a0924841f16f4f118c66/rpm-manifest -- +{"_id":"6272a0934841f16f4f118c68","creation_date":"2022-05-04T15:49:39.814000+00:00","image_id":"6272a0924841f16f4f118c66","last_update_date":"2023-07-28T12:47:25.853000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-11.2.1-9.4.el9.s390x","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC version 11 shared support library","version":"11.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"System-wide crypto policies","version":"20220223"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2022a-1.el9_0.noarch","release":"1.el9_0","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2022a-1.el9_0.src","summary":"Timezone data","version":"2022a"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.29.26-3.el9_0.s390x","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-9.0-2.17.el9.s390x","release":"2.17.el9","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:9.0-2.17.el9.src","summary":"Red Hat Enterprise Linux release file","version":"9.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.13.7-6.el9.noarch","release":"6.el9","srpm_name":"setup","srpm_nevra":"setup-0:2.13.7-6.el9.src","summary":"A set of system configuration and setup files","version":"2.13.7"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.16-2.el9.s390x","release":"2.el9","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.16-2.el9.src","summary":"The basic directory layout for a Linux system","version":"3.16"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-13.el9.noarch","release":"13.el9","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-13.el9.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools-wheel","nvra":"python3-setuptools-wheel-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"The setuptools wheel","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pcre2-syntax","nvra":"pcre2-syntax-10.37-3.el9.1.noarch","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Documentation for PCRE2 regular expressions","version":"10.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.2-8.20210508.el9.noarch","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Descriptions of common terminals","version":"6.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.34-28.el9_0.s390x","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Minimal language packs for glibc.","version":"2.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.34-28.el9_0.s390x","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Common binaries and locale data for glibc","version":"2.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.34-28.el9_0.s390x","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The GNU libc libraries","version":"2.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.2-8.20210508.el9.s390x","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses libraries","version":"6.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-5.1.8-4.el9.s390x","release":"4.el9","srpm_name":"bash","srpm_nevra":"bash-0:5.1.8-4.el9.src","summary":"The GNU Bourne Again shell","version":"5.1.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-31.el9_0.1.s390x","release":"31.el9_0.1","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-31.el9_0.1.src","summary":"Compression and decompression library","version":"1.2.11"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.5-7.el9.s390x","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"Libraries for decoding LZMA compression","version":"5.2.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.8-8.el9.s390x","release":"8.el9","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.8-8.el9.src","summary":"Libraries for applications using bzip2","version":"1.0.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libzstd","nvra":"libzstd-1.5.1-2.el9.s390x","release":"2.el9","srpm_name":"zstd","srpm_nevra":"zstd-0:1.5.1-2.el9.src","summary":"Zstd shared library","version":"1.5.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.4.18-3.el9.s390x","release":"3.el9","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.4.18-3.el9.src","summary":"Extended crypt library for descrypt, md5crypt, bcrypt, and others","version":"4.4.18"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.48-8.el9.s390x","release":"8.el9","srpm_name":"libcap","srpm_nevra":"libcap-0:2.48-8.el9.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.48"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.34.1-5.el9.s390x","release":"5.el9","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.34.1-5.el9.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.34.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Universally unique ID library","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.18-8.el9.s390x","release":"8.el9","srpm_name":"popt","srpm_nevra":"popt-0:1.18-8.el9.src","summary":"C library for parsing command line parameters","version":"1.18"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.4.2-7.el9.s390x","release":"7.el9","srpm_name":"libffi","srpm_nevra":"libffi-0:3.4.2-7.el9.src","summary":"A portable foreign function interface library","version":"3.4.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.24.1-2.el9.s390x","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.24.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.42-5.el9.s390x","release":"5.el9","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.42-5.el9.src","summary":"Library for error values used by GnuPG components","version":"1.42"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.13-1.el9.s390x","release":"1.el9","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.13-1.el9.src","summary":"Library providing XML and HTML support","version":"2.9.13"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-8.1-4.el9.s390x","release":"4.el9","srpm_name":"readline","srpm_nevra":"readline-0:8.1-4.el9.src","summary":"A library for editing typed command lines","version":"8.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.2.0-10.el9.s390x","release":"10.el9","srpm_name":"gmp","srpm_nevra":"gmp-1:6.2.0-10.el9.src","summary":"A GNU arbitrary precision library","version":"6.2.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.14-11.el9.s390x","release":"11.el9","srpm_name":"json-c","srpm_nevra":"json-c-0:0.14-11.el9.src","summary":"JSON implementation in C","version":"0.14"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Formatting library for ls-like programs.","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-11.2.1-9.4.el9.s390x","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GNU Standard C++ Library","version":"11.2.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.4.2-4.el9.s390x","release":"4.el9","srpm_name":"lua","srpm_nevra":"lua-0:5.4.2-4.el9.src","summary":"Libraries for lua","version":"5.4.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.10.0-2.el9.s390x","release":"2.el9","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.10.0-2.el9.src","summary":"A general-purpose cryptography library","version":"1.10.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.186-1.el9.s390x","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Library to read and write ELF files","version":"0.186"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.39-8.el9.s390x","release":"8.el9","srpm_name":"file","srpm_nevra":"file-0:5.39-8.el9.src","summary":"Libraries for applications using libmagic","version":"5.39"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.10-12.el9_0.s390x","release":"12.el9_0","srpm_name":"expat","srpm_nevra":"expat-0:2.2.10-12.el9_0.src","summary":"An XML parser library","version":"2.2.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.5.1-3.el9.s390x","release":"3.el9","srpm_name":"attr","srpm_nevra":"attr-0:2.5.1-3.el9.src","summary":"Dynamic library for extended attribute support","version":"2.5.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.3.1-3.el9.s390x","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Dynamic library for access control list support","version":"2.3.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.8.2-7.el9.s390x","release":"7.el9","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.8.2-7.el9.src","summary":"Alternate posix capabilities library","version":"0.8.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0.7-101.el9_0.2.s390x","release":"101.el9_0.2","srpm_name":"audit","srpm_nevra":"audit-0:3.0.7-101.el9_0.2.src","summary":"Dynamic library for libaudit","version":"3.0.7"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.46.5-2.el9.s390x","release":"2.el9","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.46.5-2.el9.src","summary":"Common error description library","version":"1.46.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.9.3-5.el9.s390x","release":"5.el9","srpm_name":"lz4","srpm_nevra":"lz4-0:1.9.3-5.el9.src","summary":"Libaries for lz4","version":"1.9.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.5-3.el9.s390x","release":"3.el9","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.5-3.el9.src","summary":"GnuPG IPC library","version":"2.5.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.19-4.el9.s390x","release":"4.el9","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.19-4.el9.src","summary":"Libraries files for gdbm","version":"1.19"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.6.1-4.el9.s390x","release":"4.el9","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.6.1-4.el9.src","summary":"Key utilities library","version":"1.6.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-3.3-2.el9.s390x","release":"2.el9","srpm_name":"libsepol","srpm_nevra":"libsepol-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.13-4.el9.s390x","release":"4.el9","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.13-4.el9.src","summary":"Library for handling page faults in user mode","version":"2.13"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.16.0-7.el9.s390x","release":"7.el9","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.16.0-7.el9.src","summary":"The ASN.1 library used in GNUTLS","version":"4.16.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.10-15.el9.s390x","release":"15.el9","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.10-15.el9.src","summary":"GNU Unicode string library","version":"0.9.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.44-3.el9.3.s390x","release":"3.el9.3","srpm_name":"pcre","srpm_nevra":"pcre-0:8.44-3.el9.3.src","summary":"Perl-compatible regular expression library","version":"8.44"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.6-5.el9.s390x","release":"5.el9","srpm_name":"grep","srpm_nevra":"grep-0:3.6-5.el9.src","summary":"Pattern matching utilities","version":"3.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.37-3.el9.1.s390x","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Perl-compatible regular expression library","version":"10.37"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-3.3-2.el9.s390x","release":"2.el9","srpm_name":"libselinux","srpm_nevra":"libselinux-0:3.3-2.el9.src","summary":"SELinux library and simple utilities","version":"3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.32-31.el9.s390x","release":"31.el9","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.32-31.el9.src","summary":"coreutils multicall binary","version":"8.32"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Block device ID library","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Device mounting library","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.8-9.el9.s390x","release":"9.el9","srpm_name":"sed","srpm_nevra":"sed-0:4.8-9.el9.src","summary":"A GNU stream text editor","version":"4.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Partitioning library for fdisk-like programs.","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.10-9.el9_0.s390x","release":"9.el9_0","srpm_name":"gzip","srpm_nevra":"gzip-0:1.10-9.el9_0.src","summary":"The GNU data compression program","version":"1.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-27.el9.s390x","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cracklib-dicts","nvra":"cracklib-dicts-2.9.6-27.el9.s390x","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"The standard CrackLib dictionaries","version":"2.9.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-3.3-2.el9.s390x","release":"2.el9","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.9-3.el9.s390x","release":"3.el9","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.9-3.el9.src","summary":"Utilities for managing accounts and shadow password files","version":"4.9"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.2.1-6.el9.s390x","release":"6.el9","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.2.1-6.el9.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.2.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.3.0-7.el9.s390x","release":"7.el9","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.3.0-7.el9.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.3.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.3.1-3.el9.s390x","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Access control list utilities","version":"2.3.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.18-1.el9.s390x","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Comps XML file manipulation library","version":"0.1.18"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-4.1.0-7.el9.s390x","release":"7.el9","srpm_name":"mpfr","srpm_nevra":"mpfr-0:4.1.0-7.el9.src","summary":"C library for multiple-precision floating-point computations","version":"4.1.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-5.1.0-6.el9.s390x","release":"6.el9","srpm_name":"gawk","srpm_nevra":"gawk-0:5.1.0-6.el9.src","summary":"The GNU version of the AWK text processing utility","version":"5.1.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.7.3-2.el9.s390x","release":"2.el9","srpm_name":"nettle","srpm_nevra":"nettle-0:3.7.3-2.el9.src","summary":"A low-level cryptographic library","version":"3.7.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.5.1-4.el9.s390x","release":"4.el9","srpm_name":"libksba","srpm_nevra":"libksba-0:1.5.1-4.el9.src","summary":"CMS and X.509 library","version":"1.5.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"systemd-rpm-macros","nvra":"systemd-rpm-macros-250-6.el9_0.noarch","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"Macros that define paths and scriptlets related to systemd","version":"250"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"alternatives","nvra":"alternatives-1.20-2.el9.s390x","release":"2.el9","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.20-2.el9.src","summary":"A tool to maintain symbolic links determining default commands","version":"1.20"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.24.1-2.el9.s390x","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"System trust module from p11-kit","version":"0.24.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2020.2.50-94.el9.noarch","release":"94.el9","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2020.2.50-94.el9.src","summary":"The Mozilla CA root certificate bundle","version":"2020.2.50"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-3.0.1-23.el9_0.s390x","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"A general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-250-6.el9_0.s390x","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd libraries","version":"250"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.7.3-9.el9.s390x","release":"9.el9","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.7.3-9.el9.src","summary":"A TLS protocol implementation","version":"3.7.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.68.4-5.el9.s390x","release":"5.el9","srpm_name":"glib2","srpm_nevra":"glib2-0:2.68.4-5.el9.src","summary":"A library of handy utility functions","version":"2.68.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.68.0-10.el9.s390x","release":"10.el9","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.68.0-10.el9.src","summary":"Introspection system for GObject-based libraries","version":"1.68.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.6.6-1.el9.s390x","release":"1.el9","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.6.6-1.el9.src","summary":"Library for JavaScript Object Notation format","version":"1.6.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-7.el9.s390x","release":"7.el9","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-7.el9.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.20-5.el9.s390x","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"Libraries for accessing D-BUS","version":"1.12.20"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"util-linux-core","nvra":"util-linux-core-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"The most essential utilities from the util-linux suite.","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-28-7.el9.s390x","release":"7.el9","srpm_name":"kmod","srpm_nevra":"kmod-0:28-7.el9.src","summary":"Libraries to handle kernel module loading and unloading","version":"28"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.5.3-1.el9.s390x","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"A library for handling streaming archive formats","version":"3.5.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"openssl","nvra":"openssl-3.0.1-23.el9_0.s390x","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"Utilities from the general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pip-wheel","nvra":"python3-pip-wheel-21.2.3-6.el9.noarch","release":"6.el9","srpm_name":"python-pip","srpm_nevra":"python-pip-0:21.2.3-6.el9.src","summary":"The pip wheel","version":"21.2.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3","nvra":"python3-3.9.10-2.el9.s390x","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python 3.9 interpreter","version":"3.9.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.9.10-2.el9.s390x","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python runtime libraries","version":"3.9.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.18-2.el9.s390x","release":"2.el9","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.18-2.el9.src","summary":"D-Bus bindings for python3","version":"1.2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.15.0-9.el9.noarch","release":"9.el9","srpm_name":"python-six","srpm_nevra":"python-six-0:1.15.0-9.el9.src","summary":"Python 2 and 3 compatibility utilities","version":"1.15.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.8.1-6.el9.noarch","release":"6.el9","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.8.1-6.el9.src","summary":"Powerful extensions to the standard datetime module","version":"2.8.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-45.el9.noarch","release":"45.el9","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-45.el9.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-idna","nvra":"python3-idna-2.10-7.el9.noarch","release":"7.el9","srpm_name":"python-idna","srpm_nevra":"python-idna-0:2.10-7.el9.src","summary":"Internationalized Domain Names in Applications (IDNA)","version":"2.10"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools","nvra":"python3-setuptools-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"Easily build and distribute Python 3 packages","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-25.el9.noarch","release":"25.el9","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-25.el9.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.18-1.el9.s390x","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Python 3 bindings for libcomps library","version":"0.1.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-chardet","nvra":"python3-chardet-4.0.0-5.el9.noarch","release":"5.el9","srpm_name":"python-chardet","srpm_nevra":"python-chardet-0:4.0.0-5.el9.src","summary":"Character encoding auto-detection in Python","version":"4.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.4.2-6.el9.noarch","release":"6.el9","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.4.2-6.el9.src","summary":"Module to simplify usage of decorators in python3","version":"4.4.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.40.1-5.el9.s390x","release":"5.el9","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.40.1-5.el9.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.40.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pysocks","nvra":"python3-pysocks-1.7.1-12.el9.noarch","release":"12.el9","srpm_name":"python-pysocks","srpm_nevra":"python-pysocks-0:1.7.1-12.el9.src","summary":"A Python SOCKS client module","version":"1.7.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-urllib3","nvra":"python3-urllib3-1.26.5-3.el9.noarch","release":"3.el9","srpm_name":"python-urllib3","srpm_nevra":"python-urllib3-0:1.26.5-3.el9.src","summary":"Python3 HTTP library with thread-safe connection pooling and file post","version":"1.26.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-requests","nvra":"python3-requests-2.25.1-6.el9.noarch","release":"6.el9","srpm_name":"python-requests","srpm_nevra":"python-requests-0:2.25.1-6.el9.src","summary":"HTTP library, written in Python, for human beings","version":"2.25.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-cloud-what","nvra":"python3-cloud-what-1.29.26-3.el9_0.s390x","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Python package for detection of public cloud provider","version":"1.29.26"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-53.el9.s390x","release":"53.el9","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-53.el9.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libeconf","nvra":"libeconf-0.4.1-2.el9.s390x","release":"2.el9","srpm_name":"libeconf","srpm_nevra":"libeconf-0:0.4.1-2.el9.src","summary":"Enhanced config file parser library","version":"0.4.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.4-8.el9.s390x","release":"8.el9","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.4-8.el9.src","summary":"A library for password generation and password quality checking","version":"1.4.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.5.1-9.el9.s390x","release":"9.el9","srpm_name":"pam","srpm_nevra":"pam-0:1.5.1-9.el9.src","summary":"An extensible library which provides authentication for applications","version":"1.5.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"A collection of basic system utilities","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgomp","nvra":"libgomp-11.2.1-9.4.el9.s390x","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC OpenMP v4.5 shared support library","version":"11.2.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.43.0-5.el9.s390x","release":"5.el9","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.43.0-5.el9.src","summary":"A library implementing the HTTP/2 protocol","version":"1.43.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.5.0-10.el9.s390x","release":"10.el9","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.5.0-10.el9.src","summary":"Convenience library for kernel netlink sockets","version":"3.5.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.15-2.el9.s390x","release":"2.el9","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.15-2.el9.src","summary":"Python module to interface with ethtool","version":"0.15"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.5.2-2.el9.s390x","release":"2.el9","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.5.2-2.el9.src","summary":"Enhanced seccomp library","version":"2.5.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.183-4.el9.s390x","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device mapper utility","version":"1.02.183"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.183-4.el9.s390x","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device-mapper shared library","version":"1.02.183"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.4.3-4.el9.s390x","release":"4.el9","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.4.3-4.el9.src","summary":"Cryptsetup shared library","version":"2.4.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.20-5.el9.s390x","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus","version":"1.12.20"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-250-6.el9_0.s390x","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd PAM module","version":"250"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-250-6.el9_0.s390x","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"System and Service Manager","version":"250"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.20-5.el9.noarch","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus configuration","version":"1.12.20"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus-broker","nvra":"dbus-broker-28-5.el9.s390x","release":"5.el9","srpm_name":"dbus-broker","srpm_nevra":"dbus-broker-0:28-5.el9.src","summary":"Linux D-Bus Message Broker","version":"28"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.186-1.el9.noarch","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Default yama attach scope sysctl setting","version":"0.186"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.186-1.el9.s390x","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Libraries to handle compiled objects","version":"0.186"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.2-3.el9.s390x","release":"3.el9","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.2-3.el9.src","summary":"Main loop abstraction library","version":"0.3.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.19.1-15.el9_0.s390x","release":"15.el9_0","srpm_name":"krb5","srpm_nevra":"krb5-0:1.19.1-15.el9_0.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.19.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcurl-minimal","nvra":"libcurl-minimal-7.76.1-14.el9.s390x","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of libcurl for minimal installations","version":"7.76.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"curl-minimal","nvra":"curl-minimal-7.76.1-14.el9.s390x","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of curl for minimal installations","version":"7.76.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.16.1.3-12.el9_0.s390x","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"The RPM package management system","version":"4.16.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.16.1.3-12.el9_0.s390x","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for manipulating RPM packages","version":"4.16.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.7.20-2.el9.s390x","release":"2.el9","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.7.20-2.el9.src","summary":"Package dependency solver","version":"0.7.20"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.16.1.3-12.el9_0.s390x","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for building RPM packages","version":"4.16.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"tpm2-tss","nvra":"tpm2-tss-3.0.3-7.el9.s390x","release":"7.el9","srpm_name":"tpm2-tss","srpm_nevra":"tpm2-tss-0:3.0.3-7.el9.src","summary":"TPM2.0 Software Stack","version":"3.0.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.4-4.el9.s390x","release":"4.el9","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.4-4.el9.src","summary":"IMA/EVM support utilities","version":"1.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-20.el9.s390x","release":"20.el9","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-20.el9.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.59-4.el9_0.s390x","release":"4.el9_0","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.59-4.el9_0.src","summary":"LDAP support libraries","version":"2.4.59"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.63-10.el9.s390x","release":"10.el9","srpm_name":"libuser","srpm_nevra":"libuser-0:0.63-10.el9.src","summary":"A user and group account administration library","version":"0.63"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-12.el9.s390x","release":"12.el9","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-12.el9.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.114-4.el9.s390x","release":"4.el9","srpm_name":"usermode","srpm_nevra":"usermode-0:1.114-4.el9.src","summary":"Tools for certain user account management tasks","version":"1.114"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.2.5-7.el9.s390x","release":"7.el9","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.2.5-7.el9.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.2.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libmodulemd","nvra":"libmodulemd-2.13.0-2.el9.s390x","release":"2.el9","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.13.0-2.el9.src","summary":"Module metadata manipulation library","version":"2.13.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.6-8.el9.s390x","release":"8.el9","srpm_name":"npth","srpm_nevra":"npth-0:1.6-8.el9.src","summary":"The New GNU Portable Threads library","version":"1.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.3.3-1.el9.s390x","release":"1.el9","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.3.3-1.el9.src","summary":"Utility for secure communication and data storage","version":"2.3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.15.1-6.el9.s390x","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.15.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.14.2-1.el9.s390x","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Repodata downloading library","version":"1.14.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.65.0-5.el9_0.s390x","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.65.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.65.0-5.el9_0.s390x","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.65.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.65.0-5.el9_0.s390x","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.65.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.14.2-1.el9.s390x","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Python 3 bindings for the librepo library","version":"1.14.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.15.1-6.el9.s390x","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"gpgme bindings for Python 3","version":"1.15.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm-sign-libs","nvra":"rpm-sign-libs-4.16.1.3-12.el9_0.s390x","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for signing RPM packages","version":"4.16.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.16.1.3-12.el9_0.s390x","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.16.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.29.26-3.el9_0.s390x","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-27.el9.s390x","release":"27.el9","srpm_name":"which","srpm_nevra":"which-0:2.21-27.el9.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.21-2.el9.2.s390x","release":"2.el9.2","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.21-2.el9.2.src","summary":"Detect if we are running in a virtual machine","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.15.2-6.el9.noarch","release":"6.el9","srpm_name":"libreport","srpm_nevra":"libreport-0:2.15.2-6.el9.src","summary":"Filesystem layout for libreport","version":"2.15.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Common data and configuration files for DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Python 3 interface to DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libdnf-plugin-subscription-manager","nvra":"libdnf-plugin-subscription-manager-1.29.26-3.el9_0.s390x","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Subscription Manager plugin for libdnf","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.24-4.el9_0.noarch","release":"4.el9_0","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.24-4.el9_0.src","summary":"Core Plugins for DNF","version":"4.0.24"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"fonts-filesystem","nvra":"fonts-filesystem-2.0.5-7.el9.1.noarch","release":"7.el9.1","srpm_name":"fonts-rpm-macros","srpm_nevra":"fonts-rpm-macros-1:2.0.5-7.el9.1.src","summary":"Directories used by font packages","version":"2.0.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dejavu-sans-fonts","nvra":"dejavu-sans-fonts-2.37-18.el9.noarch","release":"18.el9","srpm_name":"dejavu-fonts","srpm_nevra":"dejavu-fonts-0:2.37-18.el9.src","summary":"DejaVu Sans, a variable-width sans-serif font family","version":"2.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-font-en","nvra":"langpacks-core-font-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English core font meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-en","nvra":"langpacks-core-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks core meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks meta-package","version":"3.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.29.26-3.el9_0.s390x","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Tools and libraries for subscription and repository management","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies-scripts","nvra":"crypto-policies-scripts-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"Tool to switch between crypto policies","version":"20220223"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.8.0-5.el9.s390x","release":"5.el9","srpm_name":"findutils","srpm_nevra":"findutils-1:4.8.0-5.el9.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.8.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.34-3.el9.s390x","release":"3.el9","srpm_name":"tar","srpm_nevra":"tar-2:1.34-3.el9.src","summary":"GNU file archiving program","version":"1.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.2.2637-15.el9.s390x","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"A minimal version of the VIM editor","version":"8.2.2637"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-10.2-9.el9.s390x","release":"9.el9","srpm_name":"gdb","srpm_nevra":"gdb-0:10.2-9.el9.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"10.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"rootfiles","nvra":"rootfiles-8.1-31.el9.noarch","release":"31.el9","srpm_name":"rootfiles","srpm_nevra":"rootfiles-0:8.1-31.el9.src","summary":"The basic required files for the root user's directory","version":"8.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"less","nvra":"less-590-1.el9_0.s390x","release":"1.el9_0","srpm_name":"less","srpm_nevra":"less-0:590-1.el9_0.src","summary":"A text file browser similar to more, but better","version":"590"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gettext-libs","nvra":"gettext-libs-0.21-7.el9.s390x","release":"7.el9","srpm_name":"gettext","srpm_nevra":"gettext-0:0.21-7.el9.src","summary":"Libraries for gettext","version":"0.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"vim-filesystem","nvra":"vim-filesystem-8.2.2637-15.el9.noarch","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"VIM filesystem layout","version":"8.2.2637"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"tcl","nvra":"tcl-8.6.10-6.el9.s390x","release":"6.el9","srpm_name":"tcl","srpm_nevra":"tcl-1:8.6.10-6.el9.src","summary":"Tool Command Language, pronounced tickle","version":"8.6.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"procps-ng","nvra":"procps-ng-3.3.17-4.el9.s390x","release":"4.el9","srpm_name":"procps-ng","srpm_nevra":"procps-ng-0:3.3.17-4.el9.src","summary":"System and process monitoring utilities","version":"3.3.17"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libpipeline","nvra":"libpipeline-1.5.3-4.el9.s390x","release":"4.el9","srpm_name":"libpipeline","srpm_nevra":"libpipeline-0:1.5.3-4.el9.src","summary":"A pipeline manipulation library","version":"1.5.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"groff-base","nvra":"groff-base-1.22.4-10.el9.s390x","release":"10.el9","srpm_name":"groff","srpm_nevra":"groff-0:1.22.4-10.el9.src","summary":"Parts of the groff formatting system required to display manual pages","version":"1.22.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"man-db","nvra":"man-db-2.9.3-6.el9.s390x","release":"6.el9","srpm_name":"man-db","srpm_nevra":"man-db-0:2.9.3-6.el9.src","summary":"Tools for searching and reading man pages","version":"2.9.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"environment-modules","nvra":"environment-modules-5.0.1-1.el9.s390x","release":"1.el9","srpm_name":"environment-modules","srpm_nevra":"environment-modules-0:5.0.1-1.el9.src","summary":"Provides dynamic modification of a user's environment","version":"5.0.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"scl-utils","nvra":"scl-utils-2.0.3-2.el9.s390x","release":"2.el9","srpm_name":"scl-utils","srpm_nevra":"scl-utils-1:2.0.3-2.el9.src","summary":"Utilities for alternative packaging","version":"2.0.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gettext","nvra":"gettext-0.21-7.el9.s390x","release":"7.el9","srpm_name":"gettext","srpm_nevra":"gettext-0:0.21-7.el9.src","summary":"GNU libraries and utilities for producing multi-lingual messages","version":"0.21"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc-locale-source","nvra":"glibc-locale-source-2.34-28.el9_0.s390x","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The sources for the locales","version":"2.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"bsdtar","nvra":"bsdtar-3.5.3-1.el9.s390x","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"Manipulate tape archives","version":"3.5.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"xz","nvra":"xz-5.2.5-7.el9.s390x","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"LZMA compression utilities","version":"5.2.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"unzip","nvra":"unzip-6.0-56.el9.s390x","release":"56.el9","srpm_name":"unzip","srpm_nevra":"unzip-0:6.0-56.el9.src","summary":"A utility for unpacking zip files","version":"6.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rsync","nvra":"rsync-3.2.3-9.el9.s390x","release":"9.el9","srpm_name":"rsync","srpm_nevra":"rsync-0:3.2.3-9.el9.src","summary":"A program for synchronizing files over a network","version":"3.2.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc-langpack-en","nvra":"glibc-langpack-en-2.34-28.el9_0.s390x","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Locale data for English","version":"2.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libxslt","nvra":"libxslt-1.1.34-9.el9.s390x","release":"9.el9","srpm_name":"libxslt","srpm_nevra":"libxslt-0:1.1.34-9.el9.src","summary":"Library providing the Gnome XSLT engine","version":"1.1.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libtool-ltdl","nvra":"libtool-ltdl-2.4.6-45.el9.s390x","release":"45.el9","srpm_name":"libtool","srpm_nevra":"libtool-0:2.4.6-45.el9.src","summary":"Runtime libraries for GNU Libtool Dynamic Module Loader","version":"2.4.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cmake-filesystem","nvra":"cmake-filesystem-3.20.2-7.el9.s390x","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Directories used by CMake modules","version":"3.20.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"apr","nvra":"apr-1.7.0-11.el9.s390x","release":"11.el9","srpm_name":"apr","srpm_nevra":"apr-0:1.7.0-11.el9.src","summary":"Apache Portable Runtime library","version":"1.7.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"apr-util-bdb","nvra":"apr-util-bdb-1.6.1-20.el9.s390x","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"APR utility library Berkeley DB driver","version":"1.6.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"apr-util-openssl","nvra":"apr-util-openssl-1.6.1-20.el9.s390x","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"APR utility library OpenSSL crypto support","version":"1.6.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"apr-util","nvra":"apr-util-1.6.1-20.el9.s390x","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"Apache Portable Runtime Utility library","version":"1.6.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"xmlsec1","nvra":"xmlsec1-1.2.29-9.el9.s390x","release":"9.el9","srpm_name":"xmlsec1","srpm_nevra":"xmlsec1-0:1.2.29-9.el9.src","summary":"Library providing support for \"XML Signature\" and \"XML Encryption\" standards","version":"1.2.29"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libuv","nvra":"libuv-1.42.0-1.el9.s390x","release":"1.el9","srpm_name":"libuv","srpm_nevra":"libuv-1:1.42.0-1.el9.src","summary":"Platform layer for node.js","version":"1.42.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"httpd-filesystem","nvra":"httpd-filesystem-2.4.51-7.el9_0.noarch","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"The basic directory layout for the Apache HTTP Server","version":"2.4.51"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"cmake-rpm-macros","nvra":"cmake-rpm-macros-3.20.2-7.el9.noarch","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Common RPM macros for cmake","version":"3.20.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"protobuf-c","nvra":"protobuf-c-1.3.3-12.el9.s390x","release":"12.el9","srpm_name":"protobuf-c","srpm_nevra":"protobuf-c-0:1.3.3-12.el9.src","summary":"C bindings for Google's Protocol Buffers","version":"1.3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"lmdb-libs","nvra":"lmdb-libs-0.9.29-3.el9.s390x","release":"3.el9","srpm_name":"lmdb","srpm_nevra":"lmdb-0:0.9.29-3.el9.src","summary":"Shared libraries for lmdb","version":"0.9.29"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"xmlsec1-openssl","nvra":"xmlsec1-openssl-1.2.29-9.el9.s390x","release":"9.el9","srpm_name":"xmlsec1","srpm_nevra":"xmlsec1-0:1.2.29-9.el9.src","summary":"OpenSSL crypto plugin for XML Security Library","version":"1.2.29"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"lasso","nvra":"lasso-2.7.0-8.el9.s390x","release":"8.el9","srpm_name":"lasso","srpm_nevra":"lasso-0:2.7.0-8.el9.src","summary":"Liberty Alliance Single Sign On","version":"2.7.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"httpd-tools","nvra":"httpd-tools-2.4.51-7.el9_0.s390x","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Tools for use with the Apache HTTP Server","version":"2.4.51"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"redhat-logos-httpd","nvra":"redhat-logos-httpd-90.4-1.el9.noarch","release":"1.el9","srpm_name":"redhat-logos","srpm_nevra":"redhat-logos-0:90.4-1.el9.src","summary":"Red Hat-related icons and pictures used by httpd","version":"90.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libmaxminddb","nvra":"libmaxminddb-1.5.2-3.el9.s390x","release":"3.el9","srpm_name":"libmaxminddb","srpm_nevra":"libmaxminddb-0:1.5.2-3.el9.src","summary":"C library for the MaxMind DB file format","version":"1.5.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"fstrm","nvra":"fstrm-0.6.1-3.el9.s390x","release":"3.el9","srpm_name":"fstrm","srpm_nevra":"fstrm-0:0.6.1-3.el9.src","summary":"Frame Streams implementation in C","version":"0.6.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"emacs-filesystem","nvra":"emacs-filesystem-27.2-6.el9.noarch","release":"6.el9","srpm_name":"emacs","srpm_nevra":"emacs-1:27.2-6.el9.src","summary":"Emacs filesystem layout","version":"27.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"bind-license","nvra":"bind-license-9.16.23-1.el9.noarch","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"License of the BIND DNS suite","version":"9.16.23"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"bind-libs","nvra":"bind-libs-9.16.23-1.el9.s390x","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"Libraries used by the BIND DNS packages","version":"9.16.23"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pkgconf-m4","nvra":"pkgconf-m4-1.7.3-9.el9.noarch","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"m4 macros for pkgconf","version":"1.7.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"ncurses","nvra":"ncurses-6.2-8.20210508.el9.s390x","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses support utilities","version":"6.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Digest","nvra":"perl-Digest-1.19-4.el9.noarch","release":"4.el9","srpm_name":"perl-Digest","srpm_nevra":"perl-Digest-0:1.19-4.el9.src","summary":"Modules that calculate message digests","version":"1.19"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-Digest-MD5","nvra":"perl-Digest-MD5-2.58-4.el9.s390x","release":"4.el9","srpm_name":"perl-Digest-MD5","srpm_nevra":"perl-Digest-MD5-0:2.58-4.el9.src","summary":"Perl interface to the MD5 algorithm","version":"2.58"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-B","nvra":"perl-B-1.80-479.el9.s390x","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl compiler backend","version":"1.80"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-FileHandle","nvra":"perl-FileHandle-2.03-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Object methods for file handles","version":"2.03"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-AutoLoader","nvra":"perl-AutoLoader-5.74-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Load subroutines only on demand","version":"5.74"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-Data-Dumper","nvra":"perl-Data-Dumper-2.174-462.el9.s390x","release":"462.el9","srpm_name":"perl-Data-Dumper","srpm_nevra":"perl-Data-Dumper-0:2.174-462.el9.src","summary":"Stringify perl data structures, suitable for printing and eval","version":"2.174"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-libnet","nvra":"perl-libnet-3.13-4.el9.noarch","release":"4.el9","srpm_name":"perl-libnet","srpm_nevra":"perl-libnet-0:3.13-4.el9.src","summary":"Perl clients for various network protocols","version":"3.13"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-base","nvra":"perl-base-2.27-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Establish an ISA relationship with base classes at compile time","version":"2.27"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-URI","nvra":"perl-URI-5.09-3.el9.noarch","release":"3.el9","srpm_name":"perl-URI","srpm_nevra":"perl-URI-0:5.09-3.el9.src","summary":"A Perl module implementing URI parsing and manipulation","version":"5.09"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-Net-SSLeay","nvra":"perl-Net-SSLeay-1.92-1.el9.s390x","release":"1.el9","srpm_name":"perl-Net-SSLeay","srpm_nevra":"perl-Net-SSLeay-0:1.92-1.el9.src","summary":"Perl extension for using OpenSSL","version":"1.92"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Mozilla-CA","nvra":"perl-Mozilla-CA-20200520-6.el9.noarch","release":"6.el9","srpm_name":"perl-Mozilla-CA","srpm_nevra":"perl-Mozilla-CA-0:20200520-6.el9.src","summary":"Mozilla's CA certificate bundle in PEM format","version":"20200520"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-if","nvra":"perl-if-0.60.800-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Use a Perl module if a condition holds","version":"0.60.800"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IO-Socket-IP","nvra":"perl-IO-Socket-IP-0.41-5.el9.noarch","release":"5.el9","srpm_name":"perl-IO-Socket-IP","srpm_nevra":"perl-IO-Socket-IP-0:0.41-5.el9.src","summary":"Drop-in replacement for IO::Socket::INET supporting both IPv4 and IPv6","version":"0.41"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Time-Local","nvra":"perl-Time-Local-1.300-7.el9.noarch","release":"7.el9","srpm_name":"perl-Time-Local","srpm_nevra":"perl-Time-Local-2:1.300-7.el9.src","summary":"Efficiently compute time from local and GMT time","version":"1.300"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Path","nvra":"perl-File-Path-2.18-4.el9.noarch","release":"4.el9","srpm_name":"perl-File-Path","srpm_nevra":"perl-File-Path-0:2.18-4.el9.src","summary":"Create or remove directory trees","version":"2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IO-Socket-SSL","nvra":"perl-IO-Socket-SSL-2.073-1.el9.noarch","release":"1.el9","srpm_name":"perl-IO-Socket-SSL","srpm_nevra":"perl-IO-Socket-SSL-0:2.073-1.el9.src","summary":"Perl library for transparent SSL","version":"2.073"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Escapes","nvra":"perl-Pod-Escapes-1.07-460.el9.noarch","release":"460.el9","srpm_name":"perl-Pod-Escapes","srpm_nevra":"perl-Pod-Escapes-1:1.07-460.el9.src","summary":"Resolve POD escape sequences","version":"1.07"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Text-Tabs+Wrap","nvra":"perl-Text-Tabs+Wrap-2013.0523-460.el9.noarch","release":"460.el9","srpm_name":"perl-Text-Tabs+Wrap","srpm_nevra":"perl-Text-Tabs+Wrap-0:2013.0523-460.el9.src","summary":"Expand tabs and do simple line wrapping","version":"2013.0523"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Class-Struct","nvra":"perl-Class-Struct-0.66-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Declare struct-like data types as Perl classes","version":"0.66"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-POSIX","nvra":"perl-POSIX-1.94-479.el9.s390x","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl interface to IEEE Std 1003.1","version":"1.94"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Term-ANSIColor","nvra":"perl-Term-ANSIColor-5.01-461.el9.noarch","release":"461.el9","srpm_name":"perl-Term-ANSIColor","srpm_nevra":"perl-Term-ANSIColor-0:5.01-461.el9.src","summary":"Color screen output using ANSI escape sequences","version":"5.01"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IPC-Open3","nvra":"perl-IPC-Open3-1.21-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Open a process for reading, writing, and error handling","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-subs","nvra":"perl-subs-1.03-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to predeclare subroutine names","version":"1.03"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Temp","nvra":"perl-File-Temp-0.231.100-4.el9.noarch","release":"4.el9","srpm_name":"perl-File-Temp","srpm_nevra":"perl-File-Temp-1:0.231.100-4.el9.src","summary":"Return name and handle of a temporary file safely","version":"0.231.100"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-HTTP-Tiny","nvra":"perl-HTTP-Tiny-0.076-460.el9.noarch","release":"460.el9","srpm_name":"perl-HTTP-Tiny","srpm_nevra":"perl-HTTP-Tiny-0:0.076-460.el9.src","summary":"Small, simple, correct HTTP/1.1 client","version":"0.076"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Simple","nvra":"perl-Pod-Simple-3.42-4.el9.noarch","release":"4.el9","srpm_name":"perl-Pod-Simple","srpm_nevra":"perl-Pod-Simple-1:3.42-4.el9.src","summary":"Framework for parsing POD documentation","version":"3.42"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Term-Cap","nvra":"perl-Term-Cap-1.17-460.el9.noarch","release":"460.el9","srpm_name":"perl-Term-Cap","srpm_nevra":"perl-Term-Cap-0:1.17-460.el9.src","summary":"Perl termcap interface","version":"1.17"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-Socket","nvra":"perl-Socket-2.031-4.el9.s390x","release":"4.el9","srpm_name":"perl-Socket","srpm_nevra":"perl-Socket-4:2.031-4.el9.src","summary":"Networking constants and support functions","version":"2.031"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-SelectSaver","nvra":"perl-SelectSaver-1.02-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Save and restore selected file handle","version":"1.02"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Symbol","nvra":"perl-Symbol-1.08-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Manipulate Perl symbols and their names","version":"1.08"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-stat","nvra":"perl-File-stat-1.09-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"By-name interface to Perl built-in stat functions","version":"1.09"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Perldoc","nvra":"perl-Pod-Perldoc-3.28.01-461.el9.noarch","release":"461.el9","srpm_name":"perl-Pod-Perldoc","srpm_nevra":"perl-Pod-Perldoc-0:3.28.01-461.el9.src","summary":"Look up Perl documentation in Pod format","version":"3.28.01"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-podlators","nvra":"perl-podlators-4.14-460.el9.noarch","release":"460.el9","srpm_name":"perl-podlators","srpm_nevra":"perl-podlators-1:4.14-460.el9.src","summary":"Format POD source into various output formats","version":"4.14"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-Fcntl","nvra":"perl-Fcntl-1.13-479.el9.s390x","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"File operation options","version":"1.13"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Text-ParseWords","nvra":"perl-Text-ParseWords-3.30-460.el9.noarch","release":"460.el9","srpm_name":"perl-Text-ParseWords","srpm_nevra":"perl-Text-ParseWords-0:3.30-460.el9.src","summary":"Parse text into an array of tokens or array of arrays","version":"3.30"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-mro","nvra":"perl-mro-1.23-479.el9.s390x","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Method resolution order","version":"1.23"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-IO","nvra":"perl-IO-1.43-479.el9.s390x","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl input/output modules","version":"1.43"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-overloading","nvra":"perl-overloading-0.02-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to lexically control overloading","version":"0.02"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Usage","nvra":"perl-Pod-Usage-2.01-4.el9.noarch","release":"4.el9","srpm_name":"perl-Pod-Usage","srpm_nevra":"perl-Pod-Usage-4:2.01-4.el9.src","summary":"Print a usage message from embedded POD documentation","version":"2.01"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-Errno","nvra":"perl-Errno-1.30-479.el9.s390x","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"System errno constants","version":"1.30"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Basename","nvra":"perl-File-Basename-2.85-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Parse file paths into directory, file name, and suffix","version":"2.85"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Getopt-Std","nvra":"perl-Getopt-Std-1.12-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Process single-character switches with switch clustering","version":"1.12"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-MIME-Base64","nvra":"perl-MIME-Base64-3.16-4.el9.s390x","release":"4.el9","srpm_name":"perl-MIME-Base64","srpm_nevra":"perl-MIME-Base64-0:3.16-4.el9.src","summary":"Encoding and decoding of Base64 and quoted-printable strings","version":"3.16"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-Scalar-List-Utils","nvra":"perl-Scalar-List-Utils-1.56-461.el9.s390x","release":"461.el9","srpm_name":"perl-Scalar-List-Utils","srpm_nevra":"perl-Scalar-List-Utils-4:1.56-461.el9.src","summary":"A selection of general-utility scalar and list subroutines","version":"1.56"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-constant","nvra":"perl-constant-1.33-461.el9.noarch","release":"461.el9","srpm_name":"perl-constant","srpm_nevra":"perl-constant-0:1.33-461.el9.src","summary":"Perl pragma to declare constants","version":"1.33"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-Storable","nvra":"perl-Storable-3.21-460.el9.s390x","release":"460.el9","srpm_name":"perl-Storable","srpm_nevra":"perl-Storable-1:3.21-460.el9.src","summary":"Persistence for Perl data structures","version":"3.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-overload","nvra":"perl-overload-1.31-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Overloading Perl operations","version":"1.31"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-parent","nvra":"perl-parent-0.238-460.el9.noarch","release":"460.el9","srpm_name":"perl-parent","srpm_nevra":"perl-parent-1:0.238-460.el9.src","summary":"Establish an ISA relationship with base classes at compile time","version":"0.238"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-vars","nvra":"perl-vars-1.05-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to predeclare global variable names","version":"1.05"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Getopt-Long","nvra":"perl-Getopt-Long-2.52-4.el9.noarch","release":"4.el9","srpm_name":"perl-Getopt-Long","srpm_nevra":"perl-Getopt-Long-1:2.52-4.el9.src","summary":"Extended processing of command line options","version":"2.52"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Carp","nvra":"perl-Carp-1.50-460.el9.noarch","release":"460.el9","srpm_name":"perl-Carp","srpm_nevra":"perl-Carp-0:1.50-460.el9.src","summary":"Alternative warn and die for modules","version":"1.50"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Exporter","nvra":"perl-Exporter-5.74-461.el9.noarch","release":"461.el9","srpm_name":"perl-Exporter","srpm_nevra":"perl-Exporter-0:5.74-461.el9.src","summary":"Implements default import method for modules","version":"5.74"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-NDBM_File","nvra":"perl-NDBM_File-1.15-479.el9.s390x","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Tied access to ndbm files","version":"1.15"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-PathTools","nvra":"perl-PathTools-3.78-461.el9.s390x","release":"461.el9","srpm_name":"perl-PathTools","srpm_nevra":"perl-PathTools-0:3.78-461.el9.src","summary":"PathTools Perl module (Cwd, File::Spec)","version":"3.78"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-Encode","nvra":"perl-Encode-3.08-462.el9.s390x","release":"462.el9","srpm_name":"perl-Encode","srpm_nevra":"perl-Encode-4:3.08-462.el9.src","summary":"Character encodings in Perl","version":"3.08"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-libs","nvra":"perl-libs-5.32.1-479.el9.s390x","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"The libraries for the perl run-time","version":"5.32.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"perl-interpreter","nvra":"perl-interpreter-5.32.1-479.el9.s390x","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Standalone executable Perl interpreter","version":"5.32.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"make","nvra":"make-4.3-7.el9.s390x","release":"7.el9","srpm_name":"make","srpm_nevra":"make-1:4.3-7.el9.src","summary":"A GNU tool which simplifies the build process for users","version":"4.3"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"cmake-data","nvra":"cmake-data-3.20.2-7.el9.noarch","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Common data-files for cmake","version":"3.20.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cmake","nvra":"cmake-3.20.2-7.el9.s390x","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Cross-platform make system","version":"3.20.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"mailcap","nvra":"mailcap-2.1.49-5.el9.noarch","release":"5.el9","srpm_name":"mailcap","srpm_nevra":"mailcap-0:2.1.49-5.el9.src","summary":"Helper application and MIME type associations for file types","version":"2.1.49"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libtalloc","nvra":"libtalloc-2.3.3-1.el9.s390x","release":"1.el9","srpm_name":"libtalloc","srpm_nevra":"libtalloc-0:2.3.3-1.el9.src","summary":"The talloc library","version":"2.3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libpkgconf","nvra":"libpkgconf-1.7.3-9.el9.s390x","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"Backend library for pkgconf","version":"1.7.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pkgconf","nvra":"pkgconf-1.7.3-9.el9.s390x","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"Package compiler and linker metadata toolkit","version":"1.7.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pkgconf-pkg-config","nvra":"pkgconf-pkg-config-1.7.3-9.el9.s390x","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"pkgconf shim to provide /usr/bin/pkg-config","version":"1.7.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libpath_utils","nvra":"libpath_utils-0.2.1-51.el9.s390x","release":"51.el9","srpm_name":"ding-libs","srpm_nevra":"ding-libs-0:0.6.1-51.el9.src","summary":"Filesystem Path Utilities","version":"0.2.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"sscg","nvra":"sscg-3.0.0-5.el9_0.s390x","release":"5.el9_0","srpm_name":"sscg","srpm_nevra":"sscg-0:3.0.0-5.el9_0.src","summary":"Simple SSL certificate generator","version":"3.0.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libbrotli","nvra":"libbrotli-1.0.9-6.el9.s390x","release":"6.el9","srpm_name":"brotli","srpm_nevra":"brotli-0:1.0.9-6.el9.src","summary":"Library for brotli lossless compression algorithm","version":"1.0.9"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"mod_http2","nvra":"mod_http2-1.15.19-2.el9.s390x","release":"2.el9","srpm_name":"mod_http2","srpm_nevra":"mod_http2-0:1.15.19-2.el9.src","summary":"module implementing HTTP/2 for Apache 2","version":"1.15.19"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"mod_lua","nvra":"mod_lua-2.4.51-7.el9_0.s390x","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Lua scripting support for the Apache HTTP Server","version":"2.4.51"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"httpd","nvra":"httpd-2.4.51-7.el9_0.s390x","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Apache HTTP Server","version":"2.4.51"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"hostname","nvra":"hostname-3.23-6.el9.s390x","release":"6.el9","srpm_name":"hostname","srpm_nevra":"hostname-0:3.23-6.el9.src","summary":"Utility to set/show the host name or domain name","version":"3.23"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"mod_ssl","nvra":"mod_ssl-2.4.51-7.el9_0.s390x","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"SSL/TLS module for the Apache HTTP Server","version":"2.4.51"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"mod_auth_mellon","nvra":"mod_auth_mellon-0.17.0-6.el9.s390x","release":"6.el9","srpm_name":"mod_auth_mellon","srpm_nevra":"mod_auth_mellon-0:0.17.0-6.el9.src","summary":"A SAML 2.0 authentication module for the Apache Httpd Server","version":"0.17.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"nss_wrapper","nvra":"nss_wrapper-1.1.11-7.el9.s390x","release":"7.el9","srpm_name":"nss_wrapper","srpm_nevra":"nss_wrapper-0:1.1.11-7.el9.src","summary":"A wrapper for the user, group and hosts NSS API","version":"1.1.11"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"bind-utils","nvra":"bind-utils-9.16.23-1.el9.s390x","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"Utilities for querying DNS name servers","version":"9.16.23"}],"_links":{"image":{"href":"/v1/images/id/6272a0924841f16f4f118c66"}}} +-- catalog.redhat.com/api/containers/v1/images/id/6272a0954841f16f4f118c6a/rpm-manifest -- +{"_id":"6272a0964841f16f4f118c6c","creation_date":"2022-05-04T15:49:42.432000+00:00","image_id":"6272a0954841f16f4f118c6a","last_update_date":"2023-07-28T12:47:06.890000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-11.2.1-9.4.el9.aarch64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC version 11 shared support library","version":"11.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"System-wide crypto policies","version":"20220223"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2022a-1.el9_0.noarch","release":"1.el9_0","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2022a-1.el9_0.src","summary":"Timezone data","version":"2022a"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.29.26-3.el9_0.aarch64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-9.0-2.17.el9.aarch64","release":"2.17.el9","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:9.0-2.17.el9.src","summary":"Red Hat Enterprise Linux release file","version":"9.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.13.7-6.el9.noarch","release":"6.el9","srpm_name":"setup","srpm_nevra":"setup-0:2.13.7-6.el9.src","summary":"A set of system configuration and setup files","version":"2.13.7"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.16-2.el9.aarch64","release":"2.el9","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.16-2.el9.src","summary":"The basic directory layout for a Linux system","version":"3.16"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-13.el9.noarch","release":"13.el9","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-13.el9.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools-wheel","nvra":"python3-setuptools-wheel-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"The setuptools wheel","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pcre2-syntax","nvra":"pcre2-syntax-10.37-3.el9.1.noarch","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Documentation for PCRE2 regular expressions","version":"10.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.2-8.20210508.el9.noarch","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Descriptions of common terminals","version":"6.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.34-28.el9_0.aarch64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Minimal language packs for glibc.","version":"2.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.34-28.el9_0.aarch64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Common binaries and locale data for glibc","version":"2.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.34-28.el9_0.aarch64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The GNU libc libraries","version":"2.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.2-8.20210508.el9.aarch64","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses libraries","version":"6.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-5.1.8-4.el9.aarch64","release":"4.el9","srpm_name":"bash","srpm_nevra":"bash-0:5.1.8-4.el9.src","summary":"The GNU Bourne Again shell","version":"5.1.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-31.el9_0.1.aarch64","release":"31.el9_0.1","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-31.el9_0.1.src","summary":"Compression and decompression library","version":"1.2.11"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.5-7.el9.aarch64","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"Libraries for decoding LZMA compression","version":"5.2.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.8-8.el9.aarch64","release":"8.el9","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.8-8.el9.src","summary":"Libraries for applications using bzip2","version":"1.0.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libzstd","nvra":"libzstd-1.5.1-2.el9.aarch64","release":"2.el9","srpm_name":"zstd","srpm_nevra":"zstd-0:1.5.1-2.el9.src","summary":"Zstd shared library","version":"1.5.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.4.18-3.el9.aarch64","release":"3.el9","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.4.18-3.el9.src","summary":"Extended crypt library for descrypt, md5crypt, bcrypt, and others","version":"4.4.18"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.48-8.el9.aarch64","release":"8.el9","srpm_name":"libcap","srpm_nevra":"libcap-0:2.48-8.el9.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.48"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.34.1-5.el9.aarch64","release":"5.el9","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.34.1-5.el9.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.34.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Universally unique ID library","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.18-8.el9.aarch64","release":"8.el9","srpm_name":"popt","srpm_nevra":"popt-0:1.18-8.el9.src","summary":"C library for parsing command line parameters","version":"1.18"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.4.2-7.el9.aarch64","release":"7.el9","srpm_name":"libffi","srpm_nevra":"libffi-0:3.4.2-7.el9.src","summary":"A portable foreign function interface library","version":"3.4.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.24.1-2.el9.aarch64","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.24.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.42-5.el9.aarch64","release":"5.el9","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.42-5.el9.src","summary":"Library for error values used by GnuPG components","version":"1.42"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.13-1.el9.aarch64","release":"1.el9","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.13-1.el9.src","summary":"Library providing XML and HTML support","version":"2.9.13"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-8.1-4.el9.aarch64","release":"4.el9","srpm_name":"readline","srpm_nevra":"readline-0:8.1-4.el9.src","summary":"A library for editing typed command lines","version":"8.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.2.0-10.el9.aarch64","release":"10.el9","srpm_name":"gmp","srpm_nevra":"gmp-1:6.2.0-10.el9.src","summary":"A GNU arbitrary precision library","version":"6.2.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.14-11.el9.aarch64","release":"11.el9","srpm_name":"json-c","srpm_nevra":"json-c-0:0.14-11.el9.src","summary":"JSON implementation in C","version":"0.14"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Formatting library for ls-like programs.","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-11.2.1-9.4.el9.aarch64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GNU Standard C++ Library","version":"11.2.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.4.2-4.el9.aarch64","release":"4.el9","srpm_name":"lua","srpm_nevra":"lua-0:5.4.2-4.el9.src","summary":"Libraries for lua","version":"5.4.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.10.0-2.el9.aarch64","release":"2.el9","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.10.0-2.el9.src","summary":"A general-purpose cryptography library","version":"1.10.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.186-1.el9.aarch64","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Library to read and write ELF files","version":"0.186"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.39-8.el9.aarch64","release":"8.el9","srpm_name":"file","srpm_nevra":"file-0:5.39-8.el9.src","summary":"Libraries for applications using libmagic","version":"5.39"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.10-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"expat","srpm_nevra":"expat-0:2.2.10-12.el9_0.src","summary":"An XML parser library","version":"2.2.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.5.1-3.el9.aarch64","release":"3.el9","srpm_name":"attr","srpm_nevra":"attr-0:2.5.1-3.el9.src","summary":"Dynamic library for extended attribute support","version":"2.5.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.3.1-3.el9.aarch64","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Dynamic library for access control list support","version":"2.3.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.8.2-7.el9.aarch64","release":"7.el9","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.8.2-7.el9.src","summary":"Alternate posix capabilities library","version":"0.8.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0.7-101.el9_0.2.aarch64","release":"101.el9_0.2","srpm_name":"audit","srpm_nevra":"audit-0:3.0.7-101.el9_0.2.src","summary":"Dynamic library for libaudit","version":"3.0.7"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.46.5-2.el9.aarch64","release":"2.el9","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.46.5-2.el9.src","summary":"Common error description library","version":"1.46.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.9.3-5.el9.aarch64","release":"5.el9","srpm_name":"lz4","srpm_nevra":"lz4-0:1.9.3-5.el9.src","summary":"Libaries for lz4","version":"1.9.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.5-3.el9.aarch64","release":"3.el9","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.5-3.el9.src","summary":"GnuPG IPC library","version":"2.5.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.19-4.el9.aarch64","release":"4.el9","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.19-4.el9.src","summary":"Libraries files for gdbm","version":"1.19"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.6.1-4.el9.aarch64","release":"4.el9","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.6.1-4.el9.src","summary":"Key utilities library","version":"1.6.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-3.3-2.el9.aarch64","release":"2.el9","srpm_name":"libsepol","srpm_nevra":"libsepol-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.13-4.el9.aarch64","release":"4.el9","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.13-4.el9.src","summary":"Library for handling page faults in user mode","version":"2.13"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.16.0-7.el9.aarch64","release":"7.el9","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.16.0-7.el9.src","summary":"The ASN.1 library used in GNUTLS","version":"4.16.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.10-15.el9.aarch64","release":"15.el9","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.10-15.el9.src","summary":"GNU Unicode string library","version":"0.9.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.44-3.el9.3.aarch64","release":"3.el9.3","srpm_name":"pcre","srpm_nevra":"pcre-0:8.44-3.el9.3.src","summary":"Perl-compatible regular expression library","version":"8.44"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.6-5.el9.aarch64","release":"5.el9","srpm_name":"grep","srpm_nevra":"grep-0:3.6-5.el9.src","summary":"Pattern matching utilities","version":"3.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.37-3.el9.1.aarch64","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Perl-compatible regular expression library","version":"10.37"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-3.3-2.el9.aarch64","release":"2.el9","srpm_name":"libselinux","srpm_nevra":"libselinux-0:3.3-2.el9.src","summary":"SELinux library and simple utilities","version":"3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.32-31.el9.aarch64","release":"31.el9","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.32-31.el9.src","summary":"coreutils multicall binary","version":"8.32"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Block device ID library","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Device mounting library","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.8-9.el9.aarch64","release":"9.el9","srpm_name":"sed","srpm_nevra":"sed-0:4.8-9.el9.src","summary":"A GNU stream text editor","version":"4.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Partitioning library for fdisk-like programs.","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.10-9.el9_0.aarch64","release":"9.el9_0","srpm_name":"gzip","srpm_nevra":"gzip-0:1.10-9.el9_0.src","summary":"The GNU data compression program","version":"1.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-27.el9.aarch64","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cracklib-dicts","nvra":"cracklib-dicts-2.9.6-27.el9.aarch64","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"The standard CrackLib dictionaries","version":"2.9.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-3.3-2.el9.aarch64","release":"2.el9","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.9-3.el9.aarch64","release":"3.el9","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.9-3.el9.src","summary":"Utilities for managing accounts and shadow password files","version":"4.9"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.2.1-6.el9.aarch64","release":"6.el9","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.2.1-6.el9.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.2.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.3.0-7.el9.aarch64","release":"7.el9","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.3.0-7.el9.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.3.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.3.1-3.el9.aarch64","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Access control list utilities","version":"2.3.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.18-1.el9.aarch64","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Comps XML file manipulation library","version":"0.1.18"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-4.1.0-7.el9.aarch64","release":"7.el9","srpm_name":"mpfr","srpm_nevra":"mpfr-0:4.1.0-7.el9.src","summary":"C library for multiple-precision floating-point computations","version":"4.1.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-5.1.0-6.el9.aarch64","release":"6.el9","srpm_name":"gawk","srpm_nevra":"gawk-0:5.1.0-6.el9.src","summary":"The GNU version of the AWK text processing utility","version":"5.1.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.7.3-2.el9.aarch64","release":"2.el9","srpm_name":"nettle","srpm_nevra":"nettle-0:3.7.3-2.el9.src","summary":"A low-level cryptographic library","version":"3.7.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.5.1-4.el9.aarch64","release":"4.el9","srpm_name":"libksba","srpm_nevra":"libksba-0:1.5.1-4.el9.src","summary":"CMS and X.509 library","version":"1.5.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"systemd-rpm-macros","nvra":"systemd-rpm-macros-250-6.el9_0.noarch","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"Macros that define paths and scriptlets related to systemd","version":"250"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"alternatives","nvra":"alternatives-1.20-2.el9.aarch64","release":"2.el9","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.20-2.el9.src","summary":"A tool to maintain symbolic links determining default commands","version":"1.20"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.24.1-2.el9.aarch64","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"System trust module from p11-kit","version":"0.24.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2020.2.50-94.el9.noarch","release":"94.el9","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2020.2.50-94.el9.src","summary":"The Mozilla CA root certificate bundle","version":"2020.2.50"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-3.0.1-23.el9_0.aarch64","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"A general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-250-6.el9_0.aarch64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd libraries","version":"250"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.7.3-9.el9.aarch64","release":"9.el9","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.7.3-9.el9.src","summary":"A TLS protocol implementation","version":"3.7.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.68.4-5.el9.aarch64","release":"5.el9","srpm_name":"glib2","srpm_nevra":"glib2-0:2.68.4-5.el9.src","summary":"A library of handy utility functions","version":"2.68.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.68.0-10.el9.aarch64","release":"10.el9","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.68.0-10.el9.src","summary":"Introspection system for GObject-based libraries","version":"1.68.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.6.6-1.el9.aarch64","release":"1.el9","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.6.6-1.el9.src","summary":"Library for JavaScript Object Notation format","version":"1.6.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-7.el9.aarch64","release":"7.el9","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-7.el9.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.20-5.el9.aarch64","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"Libraries for accessing D-BUS","version":"1.12.20"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"util-linux-core","nvra":"util-linux-core-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"The most essential utilities from the util-linux suite.","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-28-7.el9.aarch64","release":"7.el9","srpm_name":"kmod","srpm_nevra":"kmod-0:28-7.el9.src","summary":"Libraries to handle kernel module loading and unloading","version":"28"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.5.3-1.el9.aarch64","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"A library for handling streaming archive formats","version":"3.5.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"openssl","nvra":"openssl-3.0.1-23.el9_0.aarch64","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"Utilities from the general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pip-wheel","nvra":"python3-pip-wheel-21.2.3-6.el9.noarch","release":"6.el9","srpm_name":"python-pip","srpm_nevra":"python-pip-0:21.2.3-6.el9.src","summary":"The pip wheel","version":"21.2.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3","nvra":"python3-3.9.10-2.el9.aarch64","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python 3.9 interpreter","version":"3.9.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.9.10-2.el9.aarch64","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python runtime libraries","version":"3.9.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.18-2.el9.aarch64","release":"2.el9","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.18-2.el9.src","summary":"D-Bus bindings for python3","version":"1.2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.15.0-9.el9.noarch","release":"9.el9","srpm_name":"python-six","srpm_nevra":"python-six-0:1.15.0-9.el9.src","summary":"Python 2 and 3 compatibility utilities","version":"1.15.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.8.1-6.el9.noarch","release":"6.el9","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.8.1-6.el9.src","summary":"Powerful extensions to the standard datetime module","version":"2.8.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-45.el9.noarch","release":"45.el9","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-45.el9.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-idna","nvra":"python3-idna-2.10-7.el9.noarch","release":"7.el9","srpm_name":"python-idna","srpm_nevra":"python-idna-0:2.10-7.el9.src","summary":"Internationalized Domain Names in Applications (IDNA)","version":"2.10"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools","nvra":"python3-setuptools-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"Easily build and distribute Python 3 packages","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-25.el9.noarch","release":"25.el9","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-25.el9.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.18-1.el9.aarch64","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Python 3 bindings for libcomps library","version":"0.1.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-chardet","nvra":"python3-chardet-4.0.0-5.el9.noarch","release":"5.el9","srpm_name":"python-chardet","srpm_nevra":"python-chardet-0:4.0.0-5.el9.src","summary":"Character encoding auto-detection in Python","version":"4.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.4.2-6.el9.noarch","release":"6.el9","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.4.2-6.el9.src","summary":"Module to simplify usage of decorators in python3","version":"4.4.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.40.1-5.el9.aarch64","release":"5.el9","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.40.1-5.el9.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.40.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pysocks","nvra":"python3-pysocks-1.7.1-12.el9.noarch","release":"12.el9","srpm_name":"python-pysocks","srpm_nevra":"python-pysocks-0:1.7.1-12.el9.src","summary":"A Python SOCKS client module","version":"1.7.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-urllib3","nvra":"python3-urllib3-1.26.5-3.el9.noarch","release":"3.el9","srpm_name":"python-urllib3","srpm_nevra":"python-urllib3-0:1.26.5-3.el9.src","summary":"Python3 HTTP library with thread-safe connection pooling and file post","version":"1.26.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-requests","nvra":"python3-requests-2.25.1-6.el9.noarch","release":"6.el9","srpm_name":"python-requests","srpm_nevra":"python-requests-0:2.25.1-6.el9.src","summary":"HTTP library, written in Python, for human beings","version":"2.25.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-cloud-what","nvra":"python3-cloud-what-1.29.26-3.el9_0.aarch64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Python package for detection of public cloud provider","version":"1.29.26"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dmidecode","nvra":"dmidecode-3.3-7.el9.aarch64","release":"7.el9","srpm_name":"dmidecode","srpm_nevra":"dmidecode-1:3.3-7.el9.src","summary":"Tool to analyse BIOS DMI data","version":"3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-53.el9.aarch64","release":"53.el9","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-53.el9.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libeconf","nvra":"libeconf-0.4.1-2.el9.aarch64","release":"2.el9","srpm_name":"libeconf","srpm_nevra":"libeconf-0:0.4.1-2.el9.src","summary":"Enhanced config file parser library","version":"0.4.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.4-8.el9.aarch64","release":"8.el9","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.4-8.el9.src","summary":"A library for password generation and password quality checking","version":"1.4.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.5.1-9.el9.aarch64","release":"9.el9","srpm_name":"pam","srpm_nevra":"pam-0:1.5.1-9.el9.src","summary":"An extensible library which provides authentication for applications","version":"1.5.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"A collection of basic system utilities","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgomp","nvra":"libgomp-11.2.1-9.4.el9.aarch64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC OpenMP v4.5 shared support library","version":"11.2.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.43.0-5.el9.aarch64","release":"5.el9","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.43.0-5.el9.src","summary":"A library implementing the HTTP/2 protocol","version":"1.43.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.5.0-10.el9.aarch64","release":"10.el9","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.5.0-10.el9.src","summary":"Convenience library for kernel netlink sockets","version":"3.5.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.15-2.el9.aarch64","release":"2.el9","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.15-2.el9.src","summary":"Python module to interface with ethtool","version":"0.15"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.5.2-2.el9.aarch64","release":"2.el9","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.5.2-2.el9.src","summary":"Enhanced seccomp library","version":"2.5.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.183-4.el9.aarch64","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device mapper utility","version":"1.02.183"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.183-4.el9.aarch64","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device-mapper shared library","version":"1.02.183"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.4.3-4.el9.aarch64","release":"4.el9","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.4.3-4.el9.src","summary":"Cryptsetup shared library","version":"2.4.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.20-5.el9.aarch64","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus","version":"1.12.20"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-250-6.el9_0.aarch64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd PAM module","version":"250"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-250-6.el9_0.aarch64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"System and Service Manager","version":"250"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.20-5.el9.noarch","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus configuration","version":"1.12.20"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus-broker","nvra":"dbus-broker-28-5.el9.aarch64","release":"5.el9","srpm_name":"dbus-broker","srpm_nevra":"dbus-broker-0:28-5.el9.src","summary":"Linux D-Bus Message Broker","version":"28"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.186-1.el9.noarch","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Default yama attach scope sysctl setting","version":"0.186"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.186-1.el9.aarch64","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Libraries to handle compiled objects","version":"0.186"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.2-3.el9.aarch64","release":"3.el9","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.2-3.el9.src","summary":"Main loop abstraction library","version":"0.3.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.19.1-15.el9_0.aarch64","release":"15.el9_0","srpm_name":"krb5","srpm_nevra":"krb5-0:1.19.1-15.el9_0.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.19.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcurl-minimal","nvra":"libcurl-minimal-7.76.1-14.el9.aarch64","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of libcurl for minimal installations","version":"7.76.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"curl-minimal","nvra":"curl-minimal-7.76.1-14.el9.aarch64","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of curl for minimal installations","version":"7.76.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.16.1.3-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"The RPM package management system","version":"4.16.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.16.1.3-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for manipulating RPM packages","version":"4.16.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.7.20-2.el9.aarch64","release":"2.el9","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.7.20-2.el9.src","summary":"Package dependency solver","version":"0.7.20"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.16.1.3-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for building RPM packages","version":"4.16.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"tpm2-tss","nvra":"tpm2-tss-3.0.3-7.el9.aarch64","release":"7.el9","srpm_name":"tpm2-tss","srpm_nevra":"tpm2-tss-0:3.0.3-7.el9.src","summary":"TPM2.0 Software Stack","version":"3.0.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.4-4.el9.aarch64","release":"4.el9","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.4-4.el9.src","summary":"IMA/EVM support utilities","version":"1.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-20.el9.aarch64","release":"20.el9","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-20.el9.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.59-4.el9_0.aarch64","release":"4.el9_0","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.59-4.el9_0.src","summary":"LDAP support libraries","version":"2.4.59"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.63-10.el9.aarch64","release":"10.el9","srpm_name":"libuser","srpm_nevra":"libuser-0:0.63-10.el9.src","summary":"A user and group account administration library","version":"0.63"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-12.el9.aarch64","release":"12.el9","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-12.el9.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.114-4.el9.aarch64","release":"4.el9","srpm_name":"usermode","srpm_nevra":"usermode-0:1.114-4.el9.src","summary":"Tools for certain user account management tasks","version":"1.114"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.2.5-7.el9.aarch64","release":"7.el9","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.2.5-7.el9.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.2.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libmodulemd","nvra":"libmodulemd-2.13.0-2.el9.aarch64","release":"2.el9","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.13.0-2.el9.src","summary":"Module metadata manipulation library","version":"2.13.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.6-8.el9.aarch64","release":"8.el9","srpm_name":"npth","srpm_nevra":"npth-0:1.6-8.el9.src","summary":"The New GNU Portable Threads library","version":"1.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.3.3-1.el9.aarch64","release":"1.el9","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.3.3-1.el9.src","summary":"Utility for secure communication and data storage","version":"2.3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.15.1-6.el9.aarch64","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.15.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.14.2-1.el9.aarch64","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Repodata downloading library","version":"1.14.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.65.0-5.el9_0.aarch64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.65.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.65.0-5.el9_0.aarch64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.65.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.65.0-5.el9_0.aarch64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.65.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.14.2-1.el9.aarch64","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Python 3 bindings for the librepo library","version":"1.14.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.15.1-6.el9.aarch64","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"gpgme bindings for Python 3","version":"1.15.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm-sign-libs","nvra":"rpm-sign-libs-4.16.1.3-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for signing RPM packages","version":"4.16.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.16.1.3-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.16.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.29.26-3.el9_0.aarch64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-27.el9.aarch64","release":"27.el9","srpm_name":"which","srpm_nevra":"which-0:2.21-27.el9.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.21-2.el9.2.aarch64","release":"2.el9.2","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.21-2.el9.2.src","summary":"Detect if we are running in a virtual machine","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.15.2-6.el9.noarch","release":"6.el9","srpm_name":"libreport","srpm_nevra":"libreport-0:2.15.2-6.el9.src","summary":"Filesystem layout for libreport","version":"2.15.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Common data and configuration files for DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Python 3 interface to DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libdnf-plugin-subscription-manager","nvra":"libdnf-plugin-subscription-manager-1.29.26-3.el9_0.aarch64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Subscription Manager plugin for libdnf","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.24-4.el9_0.noarch","release":"4.el9_0","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.24-4.el9_0.src","summary":"Core Plugins for DNF","version":"4.0.24"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"fonts-filesystem","nvra":"fonts-filesystem-2.0.5-7.el9.1.noarch","release":"7.el9.1","srpm_name":"fonts-rpm-macros","srpm_nevra":"fonts-rpm-macros-1:2.0.5-7.el9.1.src","summary":"Directories used by font packages","version":"2.0.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dejavu-sans-fonts","nvra":"dejavu-sans-fonts-2.37-18.el9.noarch","release":"18.el9","srpm_name":"dejavu-fonts","srpm_nevra":"dejavu-fonts-0:2.37-18.el9.src","summary":"DejaVu Sans, a variable-width sans-serif font family","version":"2.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-font-en","nvra":"langpacks-core-font-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English core font meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-en","nvra":"langpacks-core-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks core meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks meta-package","version":"3.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.29.26-3.el9_0.aarch64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Tools and libraries for subscription and repository management","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies-scripts","nvra":"crypto-policies-scripts-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"Tool to switch between crypto policies","version":"20220223"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.8.0-5.el9.aarch64","release":"5.el9","srpm_name":"findutils","srpm_nevra":"findutils-1:4.8.0-5.el9.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.8.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.34-3.el9.aarch64","release":"3.el9","srpm_name":"tar","srpm_nevra":"tar-2:1.34-3.el9.src","summary":"GNU file archiving program","version":"1.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.2.2637-15.el9.aarch64","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"A minimal version of the VIM editor","version":"8.2.2637"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-10.2-9.el9.aarch64","release":"9.el9","srpm_name":"gdb","srpm_nevra":"gdb-0:10.2-9.el9.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"10.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"rootfiles","nvra":"rootfiles-8.1-31.el9.noarch","release":"31.el9","srpm_name":"rootfiles","srpm_nevra":"rootfiles-0:8.1-31.el9.src","summary":"The basic required files for the root user's directory","version":"8.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"less","nvra":"less-590-1.el9_0.aarch64","release":"1.el9_0","srpm_name":"less","srpm_nevra":"less-0:590-1.el9_0.src","summary":"A text file browser similar to more, but better","version":"590"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"vim-filesystem","nvra":"vim-filesystem-8.2.2637-15.el9.noarch","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"VIM filesystem layout","version":"8.2.2637"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"tcl","nvra":"tcl-8.6.10-6.el9.aarch64","release":"6.el9","srpm_name":"tcl","srpm_nevra":"tcl-1:8.6.10-6.el9.src","summary":"Tool Command Language, pronounced tickle","version":"8.6.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"procps-ng","nvra":"procps-ng-3.3.17-4.el9.aarch64","release":"4.el9","srpm_name":"procps-ng","srpm_nevra":"procps-ng-0:3.3.17-4.el9.src","summary":"System and process monitoring utilities","version":"3.3.17"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libpipeline","nvra":"libpipeline-1.5.3-4.el9.aarch64","release":"4.el9","srpm_name":"libpipeline","srpm_nevra":"libpipeline-0:1.5.3-4.el9.src","summary":"A pipeline manipulation library","version":"1.5.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"groff-base","nvra":"groff-base-1.22.4-10.el9.aarch64","release":"10.el9","srpm_name":"groff","srpm_nevra":"groff-0:1.22.4-10.el9.src","summary":"Parts of the groff formatting system required to display manual pages","version":"1.22.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"man-db","nvra":"man-db-2.9.3-6.el9.aarch64","release":"6.el9","srpm_name":"man-db","srpm_nevra":"man-db-0:2.9.3-6.el9.src","summary":"Tools for searching and reading man pages","version":"2.9.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"environment-modules","nvra":"environment-modules-5.0.1-1.el9.aarch64","release":"1.el9","srpm_name":"environment-modules","srpm_nevra":"environment-modules-0:5.0.1-1.el9.src","summary":"Provides dynamic modification of a user's environment","version":"5.0.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gettext-libs","nvra":"gettext-libs-0.21-7.el9.aarch64","release":"7.el9","srpm_name":"gettext","srpm_nevra":"gettext-0:0.21-7.el9.src","summary":"Libraries for gettext","version":"0.21"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gettext","nvra":"gettext-0.21-7.el9.aarch64","release":"7.el9","srpm_name":"gettext","srpm_nevra":"gettext-0:0.21-7.el9.src","summary":"GNU libraries and utilities for producing multi-lingual messages","version":"0.21"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"scl-utils","nvra":"scl-utils-2.0.3-2.el9.aarch64","release":"2.el9","srpm_name":"scl-utils","srpm_nevra":"scl-utils-1:2.0.3-2.el9.src","summary":"Utilities for alternative packaging","version":"2.0.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc-locale-source","nvra":"glibc-locale-source-2.34-28.el9_0.aarch64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The sources for the locales","version":"2.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"bsdtar","nvra":"bsdtar-3.5.3-1.el9.aarch64","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"Manipulate tape archives","version":"3.5.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"xz","nvra":"xz-5.2.5-7.el9.aarch64","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"LZMA compression utilities","version":"5.2.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"unzip","nvra":"unzip-6.0-56.el9.aarch64","release":"56.el9","srpm_name":"unzip","srpm_nevra":"unzip-0:6.0-56.el9.src","summary":"A utility for unpacking zip files","version":"6.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rsync","nvra":"rsync-3.2.3-9.el9.aarch64","release":"9.el9","srpm_name":"rsync","srpm_nevra":"rsync-0:3.2.3-9.el9.src","summary":"A program for synchronizing files over a network","version":"3.2.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc-langpack-en","nvra":"glibc-langpack-en-2.34-28.el9_0.aarch64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Locale data for English","version":"2.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libxslt","nvra":"libxslt-1.1.34-9.el9.aarch64","release":"9.el9","srpm_name":"libxslt","srpm_nevra":"libxslt-0:1.1.34-9.el9.src","summary":"Library providing the Gnome XSLT engine","version":"1.1.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libtool-ltdl","nvra":"libtool-ltdl-2.4.6-45.el9.aarch64","release":"45.el9","srpm_name":"libtool","srpm_nevra":"libtool-0:2.4.6-45.el9.src","summary":"Runtime libraries for GNU Libtool Dynamic Module Loader","version":"2.4.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cmake-filesystem","nvra":"cmake-filesystem-3.20.2-7.el9.aarch64","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Directories used by CMake modules","version":"3.20.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"apr","nvra":"apr-1.7.0-11.el9.aarch64","release":"11.el9","srpm_name":"apr","srpm_nevra":"apr-0:1.7.0-11.el9.src","summary":"Apache Portable Runtime library","version":"1.7.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"apr-util-bdb","nvra":"apr-util-bdb-1.6.1-20.el9.aarch64","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"APR utility library Berkeley DB driver","version":"1.6.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"apr-util-openssl","nvra":"apr-util-openssl-1.6.1-20.el9.aarch64","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"APR utility library OpenSSL crypto support","version":"1.6.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"apr-util","nvra":"apr-util-1.6.1-20.el9.aarch64","release":"20.el9","srpm_name":"apr-util","srpm_nevra":"apr-util-0:1.6.1-20.el9.src","summary":"Apache Portable Runtime Utility library","version":"1.6.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"xmlsec1","nvra":"xmlsec1-1.2.29-9.el9.aarch64","release":"9.el9","srpm_name":"xmlsec1","srpm_nevra":"xmlsec1-0:1.2.29-9.el9.src","summary":"Library providing support for \"XML Signature\" and \"XML Encryption\" standards","version":"1.2.29"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libuv","nvra":"libuv-1.42.0-1.el9.aarch64","release":"1.el9","srpm_name":"libuv","srpm_nevra":"libuv-1:1.42.0-1.el9.src","summary":"Platform layer for node.js","version":"1.42.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"httpd-filesystem","nvra":"httpd-filesystem-2.4.51-7.el9_0.noarch","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"The basic directory layout for the Apache HTTP Server","version":"2.4.51"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"cmake-rpm-macros","nvra":"cmake-rpm-macros-3.20.2-7.el9.noarch","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Common RPM macros for cmake","version":"3.20.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"protobuf-c","nvra":"protobuf-c-1.3.3-12.el9.aarch64","release":"12.el9","srpm_name":"protobuf-c","srpm_nevra":"protobuf-c-0:1.3.3-12.el9.src","summary":"C bindings for Google's Protocol Buffers","version":"1.3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"lmdb-libs","nvra":"lmdb-libs-0.9.29-3.el9.aarch64","release":"3.el9","srpm_name":"lmdb","srpm_nevra":"lmdb-0:0.9.29-3.el9.src","summary":"Shared libraries for lmdb","version":"0.9.29"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"xmlsec1-openssl","nvra":"xmlsec1-openssl-1.2.29-9.el9.aarch64","release":"9.el9","srpm_name":"xmlsec1","srpm_nevra":"xmlsec1-0:1.2.29-9.el9.src","summary":"OpenSSL crypto plugin for XML Security Library","version":"1.2.29"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"lasso","nvra":"lasso-2.7.0-8.el9.aarch64","release":"8.el9","srpm_name":"lasso","srpm_nevra":"lasso-0:2.7.0-8.el9.src","summary":"Liberty Alliance Single Sign On","version":"2.7.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"httpd-tools","nvra":"httpd-tools-2.4.51-7.el9_0.aarch64","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Tools for use with the Apache HTTP Server","version":"2.4.51"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"redhat-logos-httpd","nvra":"redhat-logos-httpd-90.4-1.el9.noarch","release":"1.el9","srpm_name":"redhat-logos","srpm_nevra":"redhat-logos-0:90.4-1.el9.src","summary":"Red Hat-related icons and pictures used by httpd","version":"90.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libmaxminddb","nvra":"libmaxminddb-1.5.2-3.el9.aarch64","release":"3.el9","srpm_name":"libmaxminddb","srpm_nevra":"libmaxminddb-0:1.5.2-3.el9.src","summary":"C library for the MaxMind DB file format","version":"1.5.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"fstrm","nvra":"fstrm-0.6.1-3.el9.aarch64","release":"3.el9","srpm_name":"fstrm","srpm_nevra":"fstrm-0:0.6.1-3.el9.src","summary":"Frame Streams implementation in C","version":"0.6.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"emacs-filesystem","nvra":"emacs-filesystem-27.2-6.el9.noarch","release":"6.el9","srpm_name":"emacs","srpm_nevra":"emacs-1:27.2-6.el9.src","summary":"Emacs filesystem layout","version":"27.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"bind-license","nvra":"bind-license-9.16.23-1.el9.noarch","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"License of the BIND DNS suite","version":"9.16.23"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"bind-libs","nvra":"bind-libs-9.16.23-1.el9.aarch64","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"Libraries used by the BIND DNS packages","version":"9.16.23"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pkgconf-m4","nvra":"pkgconf-m4-1.7.3-9.el9.noarch","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"m4 macros for pkgconf","version":"1.7.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"ncurses","nvra":"ncurses-6.2-8.20210508.el9.aarch64","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses support utilities","version":"6.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Digest","nvra":"perl-Digest-1.19-4.el9.noarch","release":"4.el9","srpm_name":"perl-Digest","srpm_nevra":"perl-Digest-0:1.19-4.el9.src","summary":"Modules that calculate message digests","version":"1.19"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-Digest-MD5","nvra":"perl-Digest-MD5-2.58-4.el9.aarch64","release":"4.el9","srpm_name":"perl-Digest-MD5","srpm_nevra":"perl-Digest-MD5-0:2.58-4.el9.src","summary":"Perl interface to the MD5 algorithm","version":"2.58"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-B","nvra":"perl-B-1.80-479.el9.aarch64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl compiler backend","version":"1.80"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-FileHandle","nvra":"perl-FileHandle-2.03-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Object methods for file handles","version":"2.03"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-AutoLoader","nvra":"perl-AutoLoader-5.74-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Load subroutines only on demand","version":"5.74"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-Data-Dumper","nvra":"perl-Data-Dumper-2.174-462.el9.aarch64","release":"462.el9","srpm_name":"perl-Data-Dumper","srpm_nevra":"perl-Data-Dumper-0:2.174-462.el9.src","summary":"Stringify perl data structures, suitable for printing and eval","version":"2.174"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-libnet","nvra":"perl-libnet-3.13-4.el9.noarch","release":"4.el9","srpm_name":"perl-libnet","srpm_nevra":"perl-libnet-0:3.13-4.el9.src","summary":"Perl clients for various network protocols","version":"3.13"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-base","nvra":"perl-base-2.27-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Establish an ISA relationship with base classes at compile time","version":"2.27"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-URI","nvra":"perl-URI-5.09-3.el9.noarch","release":"3.el9","srpm_name":"perl-URI","srpm_nevra":"perl-URI-0:5.09-3.el9.src","summary":"A Perl module implementing URI parsing and manipulation","version":"5.09"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-Net-SSLeay","nvra":"perl-Net-SSLeay-1.92-1.el9.aarch64","release":"1.el9","srpm_name":"perl-Net-SSLeay","srpm_nevra":"perl-Net-SSLeay-0:1.92-1.el9.src","summary":"Perl extension for using OpenSSL","version":"1.92"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Mozilla-CA","nvra":"perl-Mozilla-CA-20200520-6.el9.noarch","release":"6.el9","srpm_name":"perl-Mozilla-CA","srpm_nevra":"perl-Mozilla-CA-0:20200520-6.el9.src","summary":"Mozilla's CA certificate bundle in PEM format","version":"20200520"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-if","nvra":"perl-if-0.60.800-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Use a Perl module if a condition holds","version":"0.60.800"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IO-Socket-IP","nvra":"perl-IO-Socket-IP-0.41-5.el9.noarch","release":"5.el9","srpm_name":"perl-IO-Socket-IP","srpm_nevra":"perl-IO-Socket-IP-0:0.41-5.el9.src","summary":"Drop-in replacement for IO::Socket::INET supporting both IPv4 and IPv6","version":"0.41"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Time-Local","nvra":"perl-Time-Local-1.300-7.el9.noarch","release":"7.el9","srpm_name":"perl-Time-Local","srpm_nevra":"perl-Time-Local-2:1.300-7.el9.src","summary":"Efficiently compute time from local and GMT time","version":"1.300"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Path","nvra":"perl-File-Path-2.18-4.el9.noarch","release":"4.el9","srpm_name":"perl-File-Path","srpm_nevra":"perl-File-Path-0:2.18-4.el9.src","summary":"Create or remove directory trees","version":"2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IO-Socket-SSL","nvra":"perl-IO-Socket-SSL-2.073-1.el9.noarch","release":"1.el9","srpm_name":"perl-IO-Socket-SSL","srpm_nevra":"perl-IO-Socket-SSL-0:2.073-1.el9.src","summary":"Perl library for transparent SSL","version":"2.073"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Escapes","nvra":"perl-Pod-Escapes-1.07-460.el9.noarch","release":"460.el9","srpm_name":"perl-Pod-Escapes","srpm_nevra":"perl-Pod-Escapes-1:1.07-460.el9.src","summary":"Resolve POD escape sequences","version":"1.07"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Text-Tabs+Wrap","nvra":"perl-Text-Tabs+Wrap-2013.0523-460.el9.noarch","release":"460.el9","srpm_name":"perl-Text-Tabs+Wrap","srpm_nevra":"perl-Text-Tabs+Wrap-0:2013.0523-460.el9.src","summary":"Expand tabs and do simple line wrapping","version":"2013.0523"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Class-Struct","nvra":"perl-Class-Struct-0.66-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Declare struct-like data types as Perl classes","version":"0.66"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-POSIX","nvra":"perl-POSIX-1.94-479.el9.aarch64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl interface to IEEE Std 1003.1","version":"1.94"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Term-ANSIColor","nvra":"perl-Term-ANSIColor-5.01-461.el9.noarch","release":"461.el9","srpm_name":"perl-Term-ANSIColor","srpm_nevra":"perl-Term-ANSIColor-0:5.01-461.el9.src","summary":"Color screen output using ANSI escape sequences","version":"5.01"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-IPC-Open3","nvra":"perl-IPC-Open3-1.21-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Open a process for reading, writing, and error handling","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-subs","nvra":"perl-subs-1.03-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to predeclare subroutine names","version":"1.03"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Temp","nvra":"perl-File-Temp-0.231.100-4.el9.noarch","release":"4.el9","srpm_name":"perl-File-Temp","srpm_nevra":"perl-File-Temp-1:0.231.100-4.el9.src","summary":"Return name and handle of a temporary file safely","version":"0.231.100"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-HTTP-Tiny","nvra":"perl-HTTP-Tiny-0.076-460.el9.noarch","release":"460.el9","srpm_name":"perl-HTTP-Tiny","srpm_nevra":"perl-HTTP-Tiny-0:0.076-460.el9.src","summary":"Small, simple, correct HTTP/1.1 client","version":"0.076"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Simple","nvra":"perl-Pod-Simple-3.42-4.el9.noarch","release":"4.el9","srpm_name":"perl-Pod-Simple","srpm_nevra":"perl-Pod-Simple-1:3.42-4.el9.src","summary":"Framework for parsing POD documentation","version":"3.42"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Term-Cap","nvra":"perl-Term-Cap-1.17-460.el9.noarch","release":"460.el9","srpm_name":"perl-Term-Cap","srpm_nevra":"perl-Term-Cap-0:1.17-460.el9.src","summary":"Perl termcap interface","version":"1.17"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-Socket","nvra":"perl-Socket-2.031-4.el9.aarch64","release":"4.el9","srpm_name":"perl-Socket","srpm_nevra":"perl-Socket-4:2.031-4.el9.src","summary":"Networking constants and support functions","version":"2.031"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-SelectSaver","nvra":"perl-SelectSaver-1.02-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Save and restore selected file handle","version":"1.02"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Symbol","nvra":"perl-Symbol-1.08-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Manipulate Perl symbols and their names","version":"1.08"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-stat","nvra":"perl-File-stat-1.09-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"By-name interface to Perl built-in stat functions","version":"1.09"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Perldoc","nvra":"perl-Pod-Perldoc-3.28.01-461.el9.noarch","release":"461.el9","srpm_name":"perl-Pod-Perldoc","srpm_nevra":"perl-Pod-Perldoc-0:3.28.01-461.el9.src","summary":"Look up Perl documentation in Pod format","version":"3.28.01"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-podlators","nvra":"perl-podlators-4.14-460.el9.noarch","release":"460.el9","srpm_name":"perl-podlators","srpm_nevra":"perl-podlators-1:4.14-460.el9.src","summary":"Format POD source into various output formats","version":"4.14"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-Fcntl","nvra":"perl-Fcntl-1.13-479.el9.aarch64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"File operation options","version":"1.13"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Text-ParseWords","nvra":"perl-Text-ParseWords-3.30-460.el9.noarch","release":"460.el9","srpm_name":"perl-Text-ParseWords","srpm_nevra":"perl-Text-ParseWords-0:3.30-460.el9.src","summary":"Parse text into an array of tokens or array of arrays","version":"3.30"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-mro","nvra":"perl-mro-1.23-479.el9.aarch64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Method resolution order","version":"1.23"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-IO","nvra":"perl-IO-1.43-479.el9.aarch64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl input/output modules","version":"1.43"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-overloading","nvra":"perl-overloading-0.02-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to lexically control overloading","version":"0.02"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Pod-Usage","nvra":"perl-Pod-Usage-2.01-4.el9.noarch","release":"4.el9","srpm_name":"perl-Pod-Usage","srpm_nevra":"perl-Pod-Usage-4:2.01-4.el9.src","summary":"Print a usage message from embedded POD documentation","version":"2.01"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-Errno","nvra":"perl-Errno-1.30-479.el9.aarch64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"System errno constants","version":"1.30"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-File-Basename","nvra":"perl-File-Basename-2.85-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Parse file paths into directory, file name, and suffix","version":"2.85"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Getopt-Std","nvra":"perl-Getopt-Std-1.12-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Process single-character switches with switch clustering","version":"1.12"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-MIME-Base64","nvra":"perl-MIME-Base64-3.16-4.el9.aarch64","release":"4.el9","srpm_name":"perl-MIME-Base64","srpm_nevra":"perl-MIME-Base64-0:3.16-4.el9.src","summary":"Encoding and decoding of Base64 and quoted-printable strings","version":"3.16"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-Scalar-List-Utils","nvra":"perl-Scalar-List-Utils-1.56-461.el9.aarch64","release":"461.el9","srpm_name":"perl-Scalar-List-Utils","srpm_nevra":"perl-Scalar-List-Utils-4:1.56-461.el9.src","summary":"A selection of general-utility scalar and list subroutines","version":"1.56"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-constant","nvra":"perl-constant-1.33-461.el9.noarch","release":"461.el9","srpm_name":"perl-constant","srpm_nevra":"perl-constant-0:1.33-461.el9.src","summary":"Perl pragma to declare constants","version":"1.33"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-Storable","nvra":"perl-Storable-3.21-460.el9.aarch64","release":"460.el9","srpm_name":"perl-Storable","srpm_nevra":"perl-Storable-1:3.21-460.el9.src","summary":"Persistence for Perl data structures","version":"3.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-overload","nvra":"perl-overload-1.31-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Overloading Perl operations","version":"1.31"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-parent","nvra":"perl-parent-0.238-460.el9.noarch","release":"460.el9","srpm_name":"perl-parent","srpm_nevra":"perl-parent-1:0.238-460.el9.src","summary":"Establish an ISA relationship with base classes at compile time","version":"0.238"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-vars","nvra":"perl-vars-1.05-479.el9.noarch","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Perl pragma to predeclare global variable names","version":"1.05"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Getopt-Long","nvra":"perl-Getopt-Long-2.52-4.el9.noarch","release":"4.el9","srpm_name":"perl-Getopt-Long","srpm_nevra":"perl-Getopt-Long-1:2.52-4.el9.src","summary":"Extended processing of command line options","version":"2.52"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Carp","nvra":"perl-Carp-1.50-460.el9.noarch","release":"460.el9","srpm_name":"perl-Carp","srpm_nevra":"perl-Carp-0:1.50-460.el9.src","summary":"Alternative warn and die for modules","version":"1.50"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"perl-Exporter","nvra":"perl-Exporter-5.74-461.el9.noarch","release":"461.el9","srpm_name":"perl-Exporter","srpm_nevra":"perl-Exporter-0:5.74-461.el9.src","summary":"Implements default import method for modules","version":"5.74"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-NDBM_File","nvra":"perl-NDBM_File-1.15-479.el9.aarch64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Tied access to ndbm files","version":"1.15"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-PathTools","nvra":"perl-PathTools-3.78-461.el9.aarch64","release":"461.el9","srpm_name":"perl-PathTools","srpm_nevra":"perl-PathTools-0:3.78-461.el9.src","summary":"PathTools Perl module (Cwd, File::Spec)","version":"3.78"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-Encode","nvra":"perl-Encode-3.08-462.el9.aarch64","release":"462.el9","srpm_name":"perl-Encode","srpm_nevra":"perl-Encode-4:3.08-462.el9.src","summary":"Character encodings in Perl","version":"3.08"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-libs","nvra":"perl-libs-5.32.1-479.el9.aarch64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"The libraries for the perl run-time","version":"5.32.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"perl-interpreter","nvra":"perl-interpreter-5.32.1-479.el9.aarch64","release":"479.el9","srpm_name":"perl","srpm_nevra":"perl-4:5.32.1-479.el9.src","summary":"Standalone executable Perl interpreter","version":"5.32.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"make","nvra":"make-4.3-7.el9.aarch64","release":"7.el9","srpm_name":"make","srpm_nevra":"make-1:4.3-7.el9.src","summary":"A GNU tool which simplifies the build process for users","version":"4.3"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"cmake-data","nvra":"cmake-data-3.20.2-7.el9.noarch","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Common data-files for cmake","version":"3.20.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cmake","nvra":"cmake-3.20.2-7.el9.aarch64","release":"7.el9","srpm_name":"cmake","srpm_nevra":"cmake-0:3.20.2-7.el9.src","summary":"Cross-platform make system","version":"3.20.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"mailcap","nvra":"mailcap-2.1.49-5.el9.noarch","release":"5.el9","srpm_name":"mailcap","srpm_nevra":"mailcap-0:2.1.49-5.el9.src","summary":"Helper application and MIME type associations for file types","version":"2.1.49"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libtalloc","nvra":"libtalloc-2.3.3-1.el9.aarch64","release":"1.el9","srpm_name":"libtalloc","srpm_nevra":"libtalloc-0:2.3.3-1.el9.src","summary":"The talloc library","version":"2.3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libpkgconf","nvra":"libpkgconf-1.7.3-9.el9.aarch64","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"Backend library for pkgconf","version":"1.7.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pkgconf","nvra":"pkgconf-1.7.3-9.el9.aarch64","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"Package compiler and linker metadata toolkit","version":"1.7.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pkgconf-pkg-config","nvra":"pkgconf-pkg-config-1.7.3-9.el9.aarch64","release":"9.el9","srpm_name":"pkgconf","srpm_nevra":"pkgconf-0:1.7.3-9.el9.src","summary":"pkgconf shim to provide /usr/bin/pkg-config","version":"1.7.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libpath_utils","nvra":"libpath_utils-0.2.1-51.el9.aarch64","release":"51.el9","srpm_name":"ding-libs","srpm_nevra":"ding-libs-0:0.6.1-51.el9.src","summary":"Filesystem Path Utilities","version":"0.2.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"sscg","nvra":"sscg-3.0.0-5.el9_0.aarch64","release":"5.el9_0","srpm_name":"sscg","srpm_nevra":"sscg-0:3.0.0-5.el9_0.src","summary":"Simple SSL certificate generator","version":"3.0.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libbrotli","nvra":"libbrotli-1.0.9-6.el9.aarch64","release":"6.el9","srpm_name":"brotli","srpm_nevra":"brotli-0:1.0.9-6.el9.src","summary":"Library for brotli lossless compression algorithm","version":"1.0.9"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"mod_http2","nvra":"mod_http2-1.15.19-2.el9.aarch64","release":"2.el9","srpm_name":"mod_http2","srpm_nevra":"mod_http2-0:1.15.19-2.el9.src","summary":"module implementing HTTP/2 for Apache 2","version":"1.15.19"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"mod_lua","nvra":"mod_lua-2.4.51-7.el9_0.aarch64","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Lua scripting support for the Apache HTTP Server","version":"2.4.51"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"httpd","nvra":"httpd-2.4.51-7.el9_0.aarch64","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"Apache HTTP Server","version":"2.4.51"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"hostname","nvra":"hostname-3.23-6.el9.aarch64","release":"6.el9","srpm_name":"hostname","srpm_nevra":"hostname-0:3.23-6.el9.src","summary":"Utility to set/show the host name or domain name","version":"3.23"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"mod_ssl","nvra":"mod_ssl-2.4.51-7.el9_0.aarch64","release":"7.el9_0","srpm_name":"httpd","srpm_nevra":"httpd-0:2.4.51-7.el9_0.src","summary":"SSL/TLS module for the Apache HTTP Server","version":"2.4.51"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"mod_auth_mellon","nvra":"mod_auth_mellon-0.17.0-6.el9.aarch64","release":"6.el9","srpm_name":"mod_auth_mellon","srpm_nevra":"mod_auth_mellon-0:0.17.0-6.el9.src","summary":"A SAML 2.0 authentication module for the Apache Httpd Server","version":"0.17.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"nss_wrapper","nvra":"nss_wrapper-1.1.11-7.el9.aarch64","release":"7.el9","srpm_name":"nss_wrapper","srpm_nevra":"nss_wrapper-0:1.1.11-7.el9.src","summary":"A wrapper for the user, group and hosts NSS API","version":"1.1.11"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"bind-utils","nvra":"bind-utils-9.16.23-1.el9.aarch64","release":"1.el9","srpm_name":"bind","srpm_nevra":"bind-32:9.16.23-1.el9.src","summary":"Utilities for querying DNS name servers","version":"9.16.23"}],"_links":{"image":{"href":"/v1/images/id/6272a0954841f16f4f118c6a"}}} diff --git a/rhel/testdata/package/ubi9_ubi.txtar b/rhel/testdata/package/ubi9_ubi.txtar new file mode 100644 index 000000000..73a0027b3 --- /dev/null +++ b/rhel/testdata/package/ubi9_ubi.txtar @@ -0,0 +1,26 @@ +Generator: fetch-container-rpm-manifest +Version: (devel) +Created: 2025-05-13T15:03:39-05:00 +Search-Term: repository:ubi9/ubi +Url: https://access.redhat.com/hydra/rest/search/kcs?fl=id%2Crepository%2Cregistry%2Cparsed_data_layers&fq=documentKind%3A%22ContainerRepository%22&fq=-eol_date%3A%5B%2A+TO+NOW%5D&fq=repository%3Aubi9%2Fubi&q=%2A&redhat_client=claircore%2Ffetch-container-rpm-manifest&rows=10 +Url: https://catalog.redhat.com/api/containers/v1/repositories/id/615bcf606feffc5384e8452e +Url: https://catalog.redhat.com/api/containers/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/ubi/images?exclude=data.brew%2Cdata.certified%2Cdata.container_grades%2Cdata.content_sets%2Cdata.cpe_ids%2Cdata.docker_image_id%2Cdata.freshness_grades%2Cdata.parsed_data.command%2Cdata.parsed_data.comment%2Cdata.parsed_data.docker_version%2Cdata.parsed_data.env_variables%2Cdata.parsed_data.labels%2Cdata.parsed_data.ports%2Cdata.parsed_data.size%2Cdata.parsed_data.uncompressed_size_bytes%2Cdata.parsed_data.user%2Cdata.raw_config%2Cdata.repositories%2Cdata.sum_layer_size_bytes%2Cdata.top_layer_id%2Cdata.uncompressed_top_layer_id&filter=deleted%21%3Dtrue&page=0&page_size=6&sort_by=creation_date%5Basc%5D +Url: https://catalog.redhat.com/api/containers/v1/images/id/6270e0fa80cc9b3025076e74/rpm-manifest +Url: https://catalog.redhat.com/api/containers/v1/images/id/6270e0fc80cc9b3025076e80/rpm-manifest +Url: https://catalog.redhat.com/api/containers/v1/images/id/6270e0ff80cc9b3025076e8c/rpm-manifest +Url: https://catalog.redhat.com/api/containers/v1/images/id/6270e10180cc9b3025076e97/rpm-manifest + +-- access.redhat.com/hydra/rest/search/kcs -- +{"spellcheck":{"collations":[],"suggestions":[]},"response":{"docs":[{"parsed_data_layers":["sha256:99814ff0874a99ca8fdc4d488a2c9ede239356628b3a84decfb86fa866af785c"],"registry":"registry.access.redhat.com","id":"615bcf606feffc5384e8452e","repository":"ubi9/ubi"}],"numFound":1,"start":0,"maxScore":2,"numFoundExact":true},"responseHeader":{"zkConnected":true,"QTime":35,"params":{"ps":"3","bf":"if(exists(pulls_in_last_30_days),sqrt(log(map(pulls_in_last_30_days,0,0,1))),1)","fl":"id,repository,registry,parsed_data_layers","q.op":"AND","fq":["documentKind:\"ContainerRepository\"","-eol_date:[* TO NOW]","repository:ubi9/ubi"," -documentKind:( ApplicationAttribute )","-accessState:(private OR retired) AND -hasPublishedRevision:false","-doNotDisplay:true"],"isAuthenticated":"false","ps2":"3","q.orig":"*","ps3":"3","defType":"edismax","spellcheck.q":"*","trace":["host: restprod02","method: GET","uri: /rs/search","route: portal","collection: access"],"redhat_client":"claircore/fetch-container-rpm-manifest","qf":"psfa^10.0 psfb^5.5 psfc^4.5 psfd^3.5 psfe^4.0 psff^2.5 psfg^2.0","matchtype":"exact","hl.fl":"abstract","wt":"json","mm":"0","start":"0","sort":"score desc,id asc","rows":"10","reqId":"ID-hydra-search-api-prod-57-7tsbg-1747146228218-0-164334","isInternal":"false","q":"*","enableElevation":"true","spellcheck":"true","pf":"psfa^12.0 psfb^5.0 psfc^4.0 psfd^3.5 psfe^4.0 psff^2.5 psfg^2.0","boost":["map(query({!field f='view_uri' v='https://access.redhat.com/downloads/content/package-browser'}), 0, 0, 1, 260.64342)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/8409'}), 0, 0, 1, 124.98317)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/914003'}), 0, 0, 1, 122.75514)","map(query({!field f='view_uri' v='https://access.redhat.com/solutions/29036'}), 0, 0, 1, 121.28655)","map(query({!field f='view_uri' v='https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/considerations_in_adopting_rhel_9/'}), 0, 0, 1, 105.7091)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/1378093'}), 0, 0, 1, 82.3566)","map(query({!field f='view_uri' v='https://access.redhat.com/solutions/4078831'}), 0, 0, 1, 79.10734)","map(query({!field f='view_uri' v='https://access.redhat.com/discussions/4311201'}), 0, 0, 1, 63.29097)","map(query({!field f='view_uri' v='https://access.redhat.com/articles/simple-content-access'}), 0, 0, 1, 60.65626)","map(query({!field f='view_uri' v='https://access.redhat.com/solutions/17215'}), 0, 0, 1, 58.7909)"],"showRetired":"false","pf3":"psfa^7.0 psfb^3.0 psfc^3.5 psfd^2.5 psfe^2.5 psff^1.0 psfg^1.0","pf2":"psfa^2.0 psfb^1.5 psfc^1.0 psfd^1.0 psfe^1.5 psff^1.0 psfg^1.0"},"status":0}} +-- catalog.redhat.com/api/containers/v1/repositories/id/615bcf606feffc5384e8452e -- +{"_id":"615bcf606feffc5384e8452e","application_categories":["Operating System"],"auto_rebuild_tags":[],"build_categories":["Scratch image"],"can_auto_release_cve_rebuild":false,"content_stream_grades":[{"grade":"A","image_ids":[{"arch":"amd64","id":"680fb0433e24a4f5dde9c468"},{"arch":"arm64","id":"680fb054b137e60c985f8563"},{"arch":"s390x","id":"680fb06334db2eef54d092fb"},{"arch":"ppc64le","id":"680fb06f5322f4fd80f7c5c5"}],"tag":"latest"}],"content_stream_tags":["latest"],"creation_date":"2021-10-05T04:06:56.727000+00:00","display_data":{"long_description":"

The Universal Base Image is designed and engineered to be the base layer for all of your containerized applications, middleware and utilities. This base image is freely redistributable, but Red Hat only supports Red Hat technologies through subscriptions for Red Hat products. This image is maintained by Red Hat and updated regularly.

","long_description_markdown":"The Universal Base Image is designed and engineered to be the base layer for all of your containerized applications, middleware and utilities. This base image is freely redistributable, but Red Hat only supports Red Hat technologies through subscriptions for Red Hat products. This image is maintained by Red Hat and updated regularly.","name":"Red Hat Universal Base Image 9","openshift_tags":"base , ubi, ubi9, universal base image","short_description":"Provides the latest release of Red Hat Universal Base Image 9."},"documentation_links":[{"title":"Understanding the UBI standard images","type":"Documentation","url":"https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/building_running_and_managing_containers/index#con_understanding-the-ubi-standard-images_assembly_types-of-container-images"}],"fbc_opt_in":false,"freshness_grades_unknown_until_date":null,"includes_multiple_content_streams":false,"last_update_date":"2025-05-13T05:31:57.727000+00:00","metadata_source":"quay","namespace":"ubi9","non_production_only":false,"object_type":"containerRepository","privileged_images_allowed":false,"product_listings":["609560d9e2b160d361d24f98"],"protected_for_pull":false,"protected_for_search":false,"published":true,"registry":"registry.access.redhat.com","registry_target":"redhat-prod","release_categories":["Generally Available"],"repository":"ubi9/ubi","requires_terms":false,"source_container_image_enabled":true,"total_size_bytes":13599744787,"total_uncompressed_size_bytes":39954253797,"use_latest":true,"vendor_label":"redhat","_links":{"certification_project":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/ubi/projects/certification"},"images":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/ubi/images"},"operator_bundles":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/ubi/operators/bundles"},"product_listings":{"href":"/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/ubi/product-listings"},"vendor":{"href":"/v1/vendors/label/redhat"}}} +-- catalog.redhat.com/api/containers/v1/repositories/registry/registry.access.redhat.com/repository/ubi9/ubi/images -- +{"data":[{"_id":"6270e0fa80cc9b3025076e74","architecture":"s390x","creation_date":"2022-05-03T07:59:54.087000+00:00","image_id":"sha256:f14f9eb6c5ec6ea9664b54ea8816462e11abc096954d59eac536b64873d908f2","last_update_date":"2024-03-28T09:48:19.570000+00:00","object_type":"containerImage","parsed_data":{"architecture":"s390x","created":"2022-05-03T07:55:17.694008Z","layers":["sha256:d3d34aa2f6e9adb72bb1c5906cb4ed3aff28371252a2af8f2499152ac74232bb","sha256:6505b024e539929a1909c8820535221fe70806ce5467b5f30aef8d45a4a97da7"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:f04d9c84fb0c4d8e9b1398213ce546466aa5936f63091d1c839b14f589419f80","size_bytes":4641},{"layer_id":"sha256:38acd6d6a1423c6c8a752db3e80c97d314e519c7ff1c9d73f11c71bc0e157143","size_bytes":205816910}]},"_links":{"artifacts":{"href":"/v1/images/id/6270e0fa80cc9b3025076e74/artifacts"},"requests":{"href":"/v1/images/id/6270e0fa80cc9b3025076e74/requests"},"rpm_manifest":{"href":"/v1/images/id/6270e0fa80cc9b3025076e74/rpm-manifest"},"test_results":{"href":"/v1/images/id/6270e0fa80cc9b3025076e74/test-results"},"vulnerabilities":{"href":"/v1/images/id/6270e0fa80cc9b3025076e74/vulnerabilities"}}},{"_id":"6270e0fc80cc9b3025076e80","architecture":"amd64","creation_date":"2022-05-03T07:59:56.806000+00:00","image_id":"sha256:88ad8a4433d3e9d8b5f247abc1396111148cbdfa0bee24542ad5d0e358a8f53b","last_update_date":"2024-03-28T09:47:44.512000+00:00","object_type":"containerImage","parsed_data":{"architecture":"amd64","created":"2022-05-03T07:55:12.352121Z","layers":["sha256:f95ee31bf3b71858108a30a93d9ffae722557f909d4b18e22f3157f96ca30dba","sha256:2c9b1d3d1a0af969583918cf19368bb46fe5d6c168c1af32e3b8be2ab2d57a88"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:0fbfc9ee0d4708c4609b66dc462ba478b0600fd7f0d3a687ddcefd0f298727cc","size_bytes":4642},{"layer_id":"sha256:a8504f08c55488bbc45f419b81bf06e23947df23e7defb73e47c94184024ad07","size_bytes":211055872}]},"_links":{"artifacts":{"href":"/v1/images/id/6270e0fc80cc9b3025076e80/artifacts"},"requests":{"href":"/v1/images/id/6270e0fc80cc9b3025076e80/requests"},"rpm_manifest":{"href":"/v1/images/id/6270e0fc80cc9b3025076e80/rpm-manifest"},"test_results":{"href":"/v1/images/id/6270e0fc80cc9b3025076e80/test-results"},"vulnerabilities":{"href":"/v1/images/id/6270e0fc80cc9b3025076e80/vulnerabilities"}}},{"_id":"6270e0ff80cc9b3025076e8c","architecture":"ppc64le","creation_date":"2022-05-03T07:59:59.300000+00:00","image_id":"sha256:a107ef985c207ae3f4b12b93fad2eab4ca5f6611e3179104726c88586f38b31f","last_update_date":"2024-03-28T09:46:36.340000+00:00","object_type":"containerImage","parsed_data":{"architecture":"ppc64le","created":"2022-05-03T08:00:46.81832Z","layers":["sha256:8623dda09cc0ef358d183d3b2313455fea30b0d45f9493879f5e3a3f3b76efdf","sha256:c049534b9160c81cff9e87c9ba943324d258666c71d9a99374dafcefd5661e11"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:74534a300c1741d16489fc1abafce15b3451aae0a33ea07cb1b150cae5dface2","size_bytes":4647},{"layer_id":"sha256:38053c80ce88753bf1cd28ff5eda265d635b40c38a0a07d2ce2a2eebd6ebfd54","size_bytes":251360562}]},"_links":{"artifacts":{"href":"/v1/images/id/6270e0ff80cc9b3025076e8c/artifacts"},"requests":{"href":"/v1/images/id/6270e0ff80cc9b3025076e8c/requests"},"rpm_manifest":{"href":"/v1/images/id/6270e0ff80cc9b3025076e8c/rpm-manifest"},"test_results":{"href":"/v1/images/id/6270e0ff80cc9b3025076e8c/test-results"},"vulnerabilities":{"href":"/v1/images/id/6270e0ff80cc9b3025076e8c/vulnerabilities"}}},{"_id":"6270e10180cc9b3025076e97","architecture":"arm64","creation_date":"2022-05-03T08:00:01.739000+00:00","image_id":"sha256:bdf17ccf141aa51259ec63cc9fa8e01bcb74dcf8ed68c90c1e89f4d1fac30eba","last_update_date":"2024-03-28T09:48:17.933000+00:00","object_type":"containerImage","parsed_data":{"architecture":"arm64","created":"2022-05-03T07:56:38.395882Z","layers":["sha256:21f54a7cff457e5e27d7777aed5db47dd10426bd5a1bcbe2f0894383295f8a5d","sha256:b9680453047ed1c7559e26e0ba71504d2c7f71e622272257bc619ca5a5736c14"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:8cd39331f19aca0df47e3b9b76f17b0c80a268a2b7f28a43d54090df8a7e930a","size_bytes":4640},{"layer_id":"sha256:98a46c9e4bcca41e0d24440fff35333989df77139be129e89a0ed540029c248d","size_bytes":226640754}]},"_links":{"artifacts":{"href":"/v1/images/id/6270e10180cc9b3025076e97/artifacts"},"requests":{"href":"/v1/images/id/6270e10180cc9b3025076e97/requests"},"rpm_manifest":{"href":"/v1/images/id/6270e10180cc9b3025076e97/rpm-manifest"},"test_results":{"href":"/v1/images/id/6270e10180cc9b3025076e97/test-results"},"vulnerabilities":{"href":"/v1/images/id/6270e10180cc9b3025076e97/vulnerabilities"}}},{"_id":"62a83b424841f1737eea0706","architecture":"s390x","creation_date":"2022-06-14T07:39:46.888000+00:00","image_id":"sha256:038a6ef5cedbec707840dffd8d8cf761985c91a47777776032b83632e6fa9743","last_update_date":"2024-03-28T09:47:49.604000+00:00","object_type":"containerImage","parsed_data":{"architecture":"s390x","created":"2022-06-14T07:23:19.486601Z","layers":["sha256:981838a95888b5b858ea711a5d1cb5ee9f50e98152e1108ebb29e3599fc0574d","sha256:00226d577153da7fcc088ecb9f37b17254d131672aec65e211337e270118b601"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:ecf6eb0c14712d5a1ff0f293c29438f372fa74f5881f019dc269cc20fc4a908f","size_bytes":4685},{"layer_id":"sha256:b164e62e20b18e59481b559671093bfae2b7b6c5ea54afc388fb5670c9340f65","size_bytes":205867738}]},"_links":{"artifacts":{"href":"/v1/images/id/62a83b424841f1737eea0706/artifacts"},"requests":{"href":"/v1/images/id/62a83b424841f1737eea0706/requests"},"rpm_manifest":{"href":"/v1/images/id/62a83b424841f1737eea0706/rpm-manifest"},"test_results":{"href":"/v1/images/id/62a83b424841f1737eea0706/test-results"},"vulnerabilities":{"href":"/v1/images/id/62a83b424841f1737eea0706/vulnerabilities"}}},{"_id":"62a83b454841f1737eea070a","architecture":"ppc64le","creation_date":"2022-06-14T07:39:49.399000+00:00","image_id":"sha256:776199a3265426e28a9113792d1d7ea4468cb780671f193152284fa1f963d547","last_update_date":"2024-03-28T09:48:52.586000+00:00","object_type":"containerImage","parsed_data":{"architecture":"ppc64le","created":"2022-06-14T07:24:04.867191Z","layers":["sha256:b84257d6b7180364375d5480b557eee137833f0c4c14da82d4ed2b66e585eafe","sha256:78b7f2ed3f9b128feeb1ecc1aae4e26525d8b3bd8c117e4879150871c3c409c0"],"os":"linux","uncompressed_layer_sizes":[{"layer_id":"sha256:38b6836034afe6b024467b8c1b534e90bfc6bbb246bdaba0e19997d07b509a88","size_bytes":4691},{"layer_id":"sha256:3eb00e024c92f349d4ab20245a68167146fd35ea8fe4a0dca8255ed2dbaa907f","size_bytes":251426287}]},"_links":{"artifacts":{"href":"/v1/images/id/62a83b454841f1737eea070a/artifacts"},"requests":{"href":"/v1/images/id/62a83b454841f1737eea070a/requests"},"rpm_manifest":{"href":"/v1/images/id/62a83b454841f1737eea070a/rpm-manifest"},"test_results":{"href":"/v1/images/id/62a83b454841f1737eea070a/test-results"},"vulnerabilities":{"href":"/v1/images/id/62a83b454841f1737eea070a/vulnerabilities"}}}],"page":0,"page_size":6,"total":240} +-- catalog.redhat.com/api/containers/v1/images/id/6270e0fa80cc9b3025076e74/rpm-manifest -- +{"_id":"6270e0fb80cc9b3025076e7a","creation_date":"2022-05-03T07:59:55.812000+00:00","image_id":"6270e0fa80cc9b3025076e74","last_update_date":"2023-06-04T00:33:46.165000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-11.2.1-9.4.el9.s390x","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC version 11 shared support library","version":"11.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"System-wide crypto policies","version":"20220223"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2022a-1.el9_0.noarch","release":"1.el9_0","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2022a-1.el9_0.src","summary":"Timezone data","version":"2022a"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.29.26-3.el9_0.s390x","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-9.0-2.17.el9.s390x","release":"2.17.el9","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:9.0-2.17.el9.src","summary":"Red Hat Enterprise Linux release file","version":"9.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.13.7-6.el9.noarch","release":"6.el9","srpm_name":"setup","srpm_nevra":"setup-0:2.13.7-6.el9.src","summary":"A set of system configuration and setup files","version":"2.13.7"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.16-2.el9.s390x","release":"2.el9","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.16-2.el9.src","summary":"The basic directory layout for a Linux system","version":"3.16"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-13.el9.noarch","release":"13.el9","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-13.el9.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools-wheel","nvra":"python3-setuptools-wheel-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"The setuptools wheel","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pcre2-syntax","nvra":"pcre2-syntax-10.37-3.el9.1.noarch","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Documentation for PCRE2 regular expressions","version":"10.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.2-8.20210508.el9.noarch","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Descriptions of common terminals","version":"6.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.34-28.el9_0.s390x","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Minimal language packs for glibc.","version":"2.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.34-28.el9_0.s390x","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Common binaries and locale data for glibc","version":"2.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.34-28.el9_0.s390x","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The GNU libc libraries","version":"2.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.2-8.20210508.el9.s390x","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses libraries","version":"6.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-5.1.8-4.el9.s390x","release":"4.el9","srpm_name":"bash","srpm_nevra":"bash-0:5.1.8-4.el9.src","summary":"The GNU Bourne Again shell","version":"5.1.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-31.el9_0.1.s390x","release":"31.el9_0.1","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-31.el9_0.1.src","summary":"Compression and decompression library","version":"1.2.11"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.5-7.el9.s390x","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"Libraries for decoding LZMA compression","version":"5.2.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.8-8.el9.s390x","release":"8.el9","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.8-8.el9.src","summary":"Libraries for applications using bzip2","version":"1.0.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libzstd","nvra":"libzstd-1.5.1-2.el9.s390x","release":"2.el9","srpm_name":"zstd","srpm_nevra":"zstd-0:1.5.1-2.el9.src","summary":"Zstd shared library","version":"1.5.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.4.18-3.el9.s390x","release":"3.el9","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.4.18-3.el9.src","summary":"Extended crypt library for descrypt, md5crypt, bcrypt, and others","version":"4.4.18"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.48-8.el9.s390x","release":"8.el9","srpm_name":"libcap","srpm_nevra":"libcap-0:2.48-8.el9.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.48"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.34.1-5.el9.s390x","release":"5.el9","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.34.1-5.el9.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.34.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Universally unique ID library","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.18-8.el9.s390x","release":"8.el9","srpm_name":"popt","srpm_nevra":"popt-0:1.18-8.el9.src","summary":"C library for parsing command line parameters","version":"1.18"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.4.2-7.el9.s390x","release":"7.el9","srpm_name":"libffi","srpm_nevra":"libffi-0:3.4.2-7.el9.src","summary":"A portable foreign function interface library","version":"3.4.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.24.1-2.el9.s390x","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.24.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.42-5.el9.s390x","release":"5.el9","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.42-5.el9.src","summary":"Library for error values used by GnuPG components","version":"1.42"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.13-1.el9.s390x","release":"1.el9","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.13-1.el9.src","summary":"Library providing XML and HTML support","version":"2.9.13"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-8.1-4.el9.s390x","release":"4.el9","srpm_name":"readline","srpm_nevra":"readline-0:8.1-4.el9.src","summary":"A library for editing typed command lines","version":"8.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.2.0-10.el9.s390x","release":"10.el9","srpm_name":"gmp","srpm_nevra":"gmp-1:6.2.0-10.el9.src","summary":"A GNU arbitrary precision library","version":"6.2.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.14-11.el9.s390x","release":"11.el9","srpm_name":"json-c","srpm_nevra":"json-c-0:0.14-11.el9.src","summary":"JSON implementation in C","version":"0.14"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Formatting library for ls-like programs.","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-11.2.1-9.4.el9.s390x","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GNU Standard C++ Library","version":"11.2.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.4.2-4.el9.s390x","release":"4.el9","srpm_name":"lua","srpm_nevra":"lua-0:5.4.2-4.el9.src","summary":"Libraries for lua","version":"5.4.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.10.0-2.el9.s390x","release":"2.el9","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.10.0-2.el9.src","summary":"A general-purpose cryptography library","version":"1.10.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.186-1.el9.s390x","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Library to read and write ELF files","version":"0.186"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.39-8.el9.s390x","release":"8.el9","srpm_name":"file","srpm_nevra":"file-0:5.39-8.el9.src","summary":"Libraries for applications using libmagic","version":"5.39"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.10-12.el9_0.s390x","release":"12.el9_0","srpm_name":"expat","srpm_nevra":"expat-0:2.2.10-12.el9_0.src","summary":"An XML parser library","version":"2.2.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.5.1-3.el9.s390x","release":"3.el9","srpm_name":"attr","srpm_nevra":"attr-0:2.5.1-3.el9.src","summary":"Dynamic library for extended attribute support","version":"2.5.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.3.1-3.el9.s390x","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Dynamic library for access control list support","version":"2.3.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.8.2-7.el9.s390x","release":"7.el9","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.8.2-7.el9.src","summary":"Alternate posix capabilities library","version":"0.8.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0.7-101.el9_0.2.s390x","release":"101.el9_0.2","srpm_name":"audit","srpm_nevra":"audit-0:3.0.7-101.el9_0.2.src","summary":"Dynamic library for libaudit","version":"3.0.7"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.46.5-2.el9.s390x","release":"2.el9","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.46.5-2.el9.src","summary":"Common error description library","version":"1.46.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.9.3-5.el9.s390x","release":"5.el9","srpm_name":"lz4","srpm_nevra":"lz4-0:1.9.3-5.el9.src","summary":"Libaries for lz4","version":"1.9.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.5-3.el9.s390x","release":"3.el9","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.5-3.el9.src","summary":"GnuPG IPC library","version":"2.5.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.19-4.el9.s390x","release":"4.el9","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.19-4.el9.src","summary":"Libraries files for gdbm","version":"1.19"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.6.1-4.el9.s390x","release":"4.el9","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.6.1-4.el9.src","summary":"Key utilities library","version":"1.6.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-3.3-2.el9.s390x","release":"2.el9","srpm_name":"libsepol","srpm_nevra":"libsepol-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.13-4.el9.s390x","release":"4.el9","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.13-4.el9.src","summary":"Library for handling page faults in user mode","version":"2.13"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.16.0-7.el9.s390x","release":"7.el9","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.16.0-7.el9.src","summary":"The ASN.1 library used in GNUTLS","version":"4.16.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.10-15.el9.s390x","release":"15.el9","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.10-15.el9.src","summary":"GNU Unicode string library","version":"0.9.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.44-3.el9.3.s390x","release":"3.el9.3","srpm_name":"pcre","srpm_nevra":"pcre-0:8.44-3.el9.3.src","summary":"Perl-compatible regular expression library","version":"8.44"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.6-5.el9.s390x","release":"5.el9","srpm_name":"grep","srpm_nevra":"grep-0:3.6-5.el9.src","summary":"Pattern matching utilities","version":"3.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.37-3.el9.1.s390x","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Perl-compatible regular expression library","version":"10.37"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-3.3-2.el9.s390x","release":"2.el9","srpm_name":"libselinux","srpm_nevra":"libselinux-0:3.3-2.el9.src","summary":"SELinux library and simple utilities","version":"3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.32-31.el9.s390x","release":"31.el9","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.32-31.el9.src","summary":"coreutils multicall binary","version":"8.32"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Block device ID library","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Device mounting library","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.8-9.el9.s390x","release":"9.el9","srpm_name":"sed","srpm_nevra":"sed-0:4.8-9.el9.src","summary":"A GNU stream text editor","version":"4.8"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Partitioning library for fdisk-like programs.","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.10-9.el9_0.s390x","release":"9.el9_0","srpm_name":"gzip","srpm_nevra":"gzip-0:1.10-9.el9_0.src","version":"1.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-27.el9.s390x","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cracklib-dicts","nvra":"cracklib-dicts-2.9.6-27.el9.s390x","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"The standard CrackLib dictionaries","version":"2.9.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-3.3-2.el9.s390x","release":"2.el9","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.9-3.el9.s390x","release":"3.el9","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.9-3.el9.src","summary":"Utilities for managing accounts and shadow password files","version":"4.9"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.2.1-6.el9.s390x","release":"6.el9","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.2.1-6.el9.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.2.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.3.0-7.el9.s390x","release":"7.el9","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.3.0-7.el9.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.3.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.3.1-3.el9.s390x","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Access control list utilities","version":"2.3.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.18-1.el9.s390x","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Comps XML file manipulation library","version":"0.1.18"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-4.1.0-7.el9.s390x","release":"7.el9","srpm_name":"mpfr","srpm_nevra":"mpfr-0:4.1.0-7.el9.src","summary":"C library for multiple-precision floating-point computations","version":"4.1.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-5.1.0-6.el9.s390x","release":"6.el9","srpm_name":"gawk","srpm_nevra":"gawk-0:5.1.0-6.el9.src","summary":"The GNU version of the AWK text processing utility","version":"5.1.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.7.3-2.el9.s390x","release":"2.el9","srpm_name":"nettle","srpm_nevra":"nettle-0:3.7.3-2.el9.src","summary":"A low-level cryptographic library","version":"3.7.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.5.1-4.el9.s390x","release":"4.el9","srpm_name":"libksba","srpm_nevra":"libksba-0:1.5.1-4.el9.src","summary":"CMS and X.509 library","version":"1.5.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"systemd-rpm-macros","nvra":"systemd-rpm-macros-250-6.el9_0.noarch","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"Macros that define paths and scriptlets related to systemd","version":"250"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"alternatives","nvra":"alternatives-1.20-2.el9.s390x","release":"2.el9","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.20-2.el9.src","summary":"A tool to maintain symbolic links determining default commands","version":"1.20"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.24.1-2.el9.s390x","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"System trust module from p11-kit","version":"0.24.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2020.2.50-94.el9.noarch","release":"94.el9","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2020.2.50-94.el9.src","summary":"The Mozilla CA root certificate bundle","version":"2020.2.50"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-3.0.1-23.el9_0.s390x","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"A general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-250-6.el9_0.s390x","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd libraries","version":"250"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.7.3-9.el9.s390x","release":"9.el9","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.7.3-9.el9.src","summary":"A TLS protocol implementation","version":"3.7.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.68.4-5.el9.s390x","release":"5.el9","srpm_name":"glib2","srpm_nevra":"glib2-0:2.68.4-5.el9.src","summary":"A library of handy utility functions","version":"2.68.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.68.0-10.el9.s390x","release":"10.el9","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.68.0-10.el9.src","summary":"Introspection system for GObject-based libraries","version":"1.68.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.6.6-1.el9.s390x","release":"1.el9","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.6.6-1.el9.src","summary":"Library for JavaScript Object Notation format","version":"1.6.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-7.el9.s390x","release":"7.el9","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-7.el9.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.20-5.el9.s390x","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"Libraries for accessing D-BUS","version":"1.12.20"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"util-linux-core","nvra":"util-linux-core-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"The most essential utilities from the util-linux suite.","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-28-7.el9.s390x","release":"7.el9","srpm_name":"kmod","srpm_nevra":"kmod-0:28-7.el9.src","summary":"Libraries to handle kernel module loading and unloading","version":"28"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.5.3-1.el9.s390x","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"A library for handling streaming archive formats","version":"3.5.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"openssl","nvra":"openssl-3.0.1-23.el9_0.s390x","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"Utilities from the general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pip-wheel","nvra":"python3-pip-wheel-21.2.3-6.el9.noarch","release":"6.el9","srpm_name":"python-pip","srpm_nevra":"python-pip-0:21.2.3-6.el9.src","summary":"The pip wheel","version":"21.2.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3","nvra":"python3-3.9.10-2.el9.s390x","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python 3.9 interpreter","version":"3.9.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.9.10-2.el9.s390x","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python runtime libraries","version":"3.9.10"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.18-2.el9.s390x","release":"2.el9","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.18-2.el9.src","summary":"D-Bus bindings for python3","version":"1.2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.15.0-9.el9.noarch","release":"9.el9","srpm_name":"python-six","srpm_nevra":"python-six-0:1.15.0-9.el9.src","summary":"Python 2 and 3 compatibility utilities","version":"1.15.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.8.1-6.el9.noarch","release":"6.el9","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.8.1-6.el9.src","summary":"Powerful extensions to the standard datetime module","version":"2.8.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-45.el9.noarch","release":"45.el9","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-45.el9.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-idna","nvra":"python3-idna-2.10-7.el9.noarch","release":"7.el9","srpm_name":"python-idna","srpm_nevra":"python-idna-0:2.10-7.el9.src","summary":"Internationalized Domain Names in Applications (IDNA)","version":"2.10"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools","nvra":"python3-setuptools-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"Easily build and distribute Python 3 packages","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-25.el9.noarch","release":"25.el9","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-25.el9.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.18-1.el9.s390x","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Python 3 bindings for libcomps library","version":"0.1.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-chardet","nvra":"python3-chardet-4.0.0-5.el9.noarch","release":"5.el9","srpm_name":"python-chardet","srpm_nevra":"python-chardet-0:4.0.0-5.el9.src","summary":"Character encoding auto-detection in Python","version":"4.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.4.2-6.el9.noarch","release":"6.el9","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.4.2-6.el9.src","summary":"Module to simplify usage of decorators in python3","version":"4.4.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.40.1-5.el9.s390x","release":"5.el9","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.40.1-5.el9.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.40.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pysocks","nvra":"python3-pysocks-1.7.1-12.el9.noarch","release":"12.el9","srpm_name":"python-pysocks","srpm_nevra":"python-pysocks-0:1.7.1-12.el9.src","summary":"A Python SOCKS client module","version":"1.7.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-urllib3","nvra":"python3-urllib3-1.26.5-3.el9.noarch","release":"3.el9","srpm_name":"python-urllib3","srpm_nevra":"python-urllib3-0:1.26.5-3.el9.src","summary":"Python3 HTTP library with thread-safe connection pooling and file post","version":"1.26.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-requests","nvra":"python3-requests-2.25.1-6.el9.noarch","release":"6.el9","srpm_name":"python-requests","srpm_nevra":"python-requests-0:2.25.1-6.el9.src","summary":"HTTP library, written in Python, for human beings","version":"2.25.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-cloud-what","nvra":"python3-cloud-what-1.29.26-3.el9_0.s390x","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Python package for detection of public cloud provider","version":"1.29.26"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-53.el9.s390x","release":"53.el9","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-53.el9.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libeconf","nvra":"libeconf-0.4.1-2.el9.s390x","release":"2.el9","srpm_name":"libeconf","srpm_nevra":"libeconf-0:0.4.1-2.el9.src","summary":"Enhanced config file parser library","version":"0.4.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.4-8.el9.s390x","release":"8.el9","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.4-8.el9.src","summary":"A library for password generation and password quality checking","version":"1.4.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.5.1-9.el9.s390x","release":"9.el9","srpm_name":"pam","srpm_nevra":"pam-0:1.5.1-9.el9.src","summary":"An extensible library which provides authentication for applications","version":"1.5.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.37.4-3.el9.s390x","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"A collection of basic system utilities","version":"2.37.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libgomp","nvra":"libgomp-11.2.1-9.4.el9.s390x","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC OpenMP v4.5 shared support library","version":"11.2.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.43.0-5.el9.s390x","release":"5.el9","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.43.0-5.el9.src","summary":"A library implementing the HTTP/2 protocol","version":"1.43.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.5.0-10.el9.s390x","release":"10.el9","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.5.0-10.el9.src","summary":"Convenience library for kernel netlink sockets","version":"3.5.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.15-2.el9.s390x","release":"2.el9","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.15-2.el9.src","summary":"Python module to interface with ethtool","version":"0.15"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.5.2-2.el9.s390x","release":"2.el9","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.5.2-2.el9.src","summary":"Enhanced seccomp library","version":"2.5.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.183-4.el9.s390x","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device mapper utility","version":"1.02.183"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.183-4.el9.s390x","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device-mapper shared library","version":"1.02.183"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.4.3-4.el9.s390x","release":"4.el9","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.4.3-4.el9.src","summary":"Cryptsetup shared library","version":"2.4.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.20-5.el9.s390x","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus","version":"1.12.20"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-250-6.el9_0.s390x","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd PAM module","version":"250"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-250-6.el9_0.s390x","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"System and Service Manager","version":"250"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.20-5.el9.noarch","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus configuration","version":"1.12.20"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"dbus-broker","nvra":"dbus-broker-28-5.el9.s390x","release":"5.el9","srpm_name":"dbus-broker","srpm_nevra":"dbus-broker-0:28-5.el9.src","summary":"Linux D-Bus Message Broker","version":"28"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.186-1.el9.noarch","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Default yama attach scope sysctl setting","version":"0.186"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.186-1.el9.s390x","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Libraries to handle compiled objects","version":"0.186"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.2-3.el9.s390x","release":"3.el9","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.2-3.el9.src","summary":"Main loop abstraction library","version":"0.3.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.19.1-15.el9_0.s390x","release":"15.el9_0","srpm_name":"krb5","srpm_nevra":"krb5-0:1.19.1-15.el9_0.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.19.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libcurl-minimal","nvra":"libcurl-minimal-7.76.1-14.el9.s390x","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of libcurl for minimal installations","version":"7.76.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"curl-minimal","nvra":"curl-minimal-7.76.1-14.el9.s390x","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of curl for minimal installations","version":"7.76.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.16.1.3-12.el9_0.s390x","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"The RPM package management system","version":"4.16.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.16.1.3-12.el9_0.s390x","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for manipulating RPM packages","version":"4.16.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.7.20-2.el9.s390x","release":"2.el9","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.7.20-2.el9.src","summary":"Package dependency solver","version":"0.7.20"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.16.1.3-12.el9_0.s390x","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for building RPM packages","version":"4.16.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"tpm2-tss","nvra":"tpm2-tss-3.0.3-7.el9.s390x","release":"7.el9","srpm_name":"tpm2-tss","srpm_nevra":"tpm2-tss-0:3.0.3-7.el9.src","summary":"TPM2.0 Software Stack","version":"3.0.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.4-4.el9.s390x","release":"4.el9","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.4-4.el9.src","summary":"IMA/EVM support utilities","version":"1.4"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-20.el9.s390x","release":"20.el9","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-20.el9.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.59-4.el9_0.s390x","release":"4.el9_0","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.59-4.el9_0.src","summary":"LDAP support libraries","version":"2.4.59"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.63-10.el9.s390x","release":"10.el9","srpm_name":"libuser","srpm_nevra":"libuser-0:0.63-10.el9.src","summary":"A user and group account administration library","version":"0.63"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-12.el9.s390x","release":"12.el9","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-12.el9.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.114-4.el9.s390x","release":"4.el9","srpm_name":"usermode","srpm_nevra":"usermode-0:1.114-4.el9.src","summary":"Tools for certain user account management tasks","version":"1.114"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.2.5-7.el9.s390x","release":"7.el9","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.2.5-7.el9.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.2.5"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libmodulemd","nvra":"libmodulemd-2.13.0-2.el9.s390x","release":"2.el9","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.13.0-2.el9.src","summary":"Module metadata manipulation library","version":"2.13.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.6-8.el9.s390x","release":"8.el9","srpm_name":"npth","srpm_nevra":"npth-0:1.6-8.el9.src","summary":"The New GNU Portable Threads library","version":"1.6"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.3.3-1.el9.s390x","release":"1.el9","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.3.3-1.el9.src","summary":"Utility for secure communication and data storage","version":"2.3.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.15.1-6.el9.s390x","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.15.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.14.2-1.el9.s390x","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Repodata downloading library","version":"1.14.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.65.0-5.el9_0.s390x","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.65.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.65.0-5.el9_0.s390x","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.65.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.65.0-5.el9_0.s390x","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.65.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.14.2-1.el9.s390x","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Python 3 bindings for the librepo library","version":"1.14.2"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.15.1-6.el9.s390x","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"gpgme bindings for Python 3","version":"1.15.1"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"rpm-sign-libs","nvra":"rpm-sign-libs-4.16.1.3-12.el9_0.s390x","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for signing RPM packages","version":"4.16.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.16.1.3-12.el9_0.s390x","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.16.1.3"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.29.26-3.el9_0.s390x","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-27.el9.s390x","release":"27.el9","srpm_name":"which","srpm_nevra":"which-0:2.21-27.el9.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.21-2.el9.2.s390x","release":"2.el9.2","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.21-2.el9.2.src","summary":"Detect if we are running in a virtual machine","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.15.2-6.el9.noarch","release":"6.el9","srpm_name":"libreport","srpm_nevra":"libreport-0:2.15.2-6.el9.src","summary":"Filesystem layout for libreport","version":"2.15.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Common data and configuration files for DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Python 3 interface to DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"libdnf-plugin-subscription-manager","nvra":"libdnf-plugin-subscription-manager-1.29.26-3.el9_0.s390x","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Subscription Manager plugin for libdnf","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.24-4.el9_0.noarch","release":"4.el9_0","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.24-4.el9_0.src","summary":"Core Plugins for DNF","version":"4.0.24"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"fonts-filesystem","nvra":"fonts-filesystem-2.0.5-7.el9.1.noarch","release":"7.el9.1","srpm_name":"fonts-rpm-macros","srpm_nevra":"fonts-rpm-macros-1:2.0.5-7.el9.1.src","summary":"Directories used by font packages","version":"2.0.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dejavu-sans-fonts","nvra":"dejavu-sans-fonts-2.37-18.el9.noarch","release":"18.el9","srpm_name":"dejavu-fonts","srpm_nevra":"dejavu-fonts-0:2.37-18.el9.src","summary":"DejaVu Sans, a variable-width sans-serif font family","version":"2.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-font-en","nvra":"langpacks-core-font-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English core font meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-en","nvra":"langpacks-core-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks core meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks meta-package","version":"3.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.29.26-3.el9_0.s390x","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Tools and libraries for subscription and repository management","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies-scripts","nvra":"crypto-policies-scripts-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"Tool to switch between crypto policies","version":"20220223"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.8.0-5.el9.s390x","release":"5.el9","srpm_name":"findutils","srpm_nevra":"findutils-1:4.8.0-5.el9.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.8.0"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.34-3.el9.s390x","release":"3.el9","srpm_name":"tar","srpm_nevra":"tar-2:1.34-3.el9.src","summary":"GNU file archiving program","version":"1.34"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.2.2637-15.el9.s390x","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"A minimal version of the VIM editor","version":"8.2.2637"},{"architecture":"s390x","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-10.2-9.el9.s390x","release":"9.el9","srpm_name":"gdb","srpm_nevra":"gdb-0:10.2-9.el9.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"10.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"rootfiles","nvra":"rootfiles-8.1-31.el9.noarch","release":"31.el9","srpm_name":"rootfiles","srpm_nevra":"rootfiles-0:8.1-31.el9.src","summary":"The basic required files for the root user's directory","version":"8.1"}],"_links":{"image":{"href":"/v1/images/id/6270e0fa80cc9b3025076e74"}}} +-- catalog.redhat.com/api/containers/v1/images/id/6270e0fc80cc9b3025076e80/rpm-manifest -- +{"_id":"6270e0fe80cc9b3025076e86","creation_date":"2022-05-03T07:59:58.253000+00:00","image_id":"6270e0fc80cc9b3025076e80","last_update_date":"2023-06-04T00:33:45.691000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-11.2.1-9.4.el9.x86_64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC version 11 shared support library","version":"11.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"System-wide crypto policies","version":"20220223"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2022a-1.el9_0.noarch","release":"1.el9_0","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2022a-1.el9_0.src","summary":"Timezone data","version":"2022a"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.29.26-3.el9_0.x86_64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-9.0-2.17.el9.x86_64","release":"2.17.el9","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:9.0-2.17.el9.src","summary":"Red Hat Enterprise Linux release file","version":"9.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.13.7-6.el9.noarch","release":"6.el9","srpm_name":"setup","srpm_nevra":"setup-0:2.13.7-6.el9.src","summary":"A set of system configuration and setup files","version":"2.13.7"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.16-2.el9.x86_64","release":"2.el9","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.16-2.el9.src","summary":"The basic directory layout for a Linux system","version":"3.16"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-13.el9.noarch","release":"13.el9","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-13.el9.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools-wheel","nvra":"python3-setuptools-wheel-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"The setuptools wheel","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pcre2-syntax","nvra":"pcre2-syntax-10.37-3.el9.1.noarch","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Documentation for PCRE2 regular expressions","version":"10.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.2-8.20210508.el9.noarch","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Descriptions of common terminals","version":"6.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.34-28.el9_0.x86_64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Minimal language packs for glibc.","version":"2.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.34-28.el9_0.x86_64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Common binaries and locale data for glibc","version":"2.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.34-28.el9_0.x86_64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The GNU libc libraries","version":"2.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.2-8.20210508.el9.x86_64","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses libraries","version":"6.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-5.1.8-4.el9.x86_64","release":"4.el9","srpm_name":"bash","srpm_nevra":"bash-0:5.1.8-4.el9.src","summary":"The GNU Bourne Again shell","version":"5.1.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-31.el9_0.1.x86_64","release":"31.el9_0.1","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-31.el9_0.1.src","summary":"Compression and decompression library","version":"1.2.11"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.5-7.el9.x86_64","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"Libraries for decoding LZMA compression","version":"5.2.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.8-8.el9.x86_64","release":"8.el9","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.8-8.el9.src","summary":"Libraries for applications using bzip2","version":"1.0.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.4.18-3.el9.x86_64","release":"3.el9","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.4.18-3.el9.src","summary":"Extended crypt library for descrypt, md5crypt, bcrypt, and others","version":"4.4.18"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libzstd","nvra":"libzstd-1.5.1-2.el9.x86_64","release":"2.el9","srpm_name":"zstd","srpm_nevra":"zstd-0:1.5.1-2.el9.src","summary":"Zstd shared library","version":"1.5.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.48-8.el9.x86_64","release":"8.el9","srpm_name":"libcap","srpm_nevra":"libcap-0:2.48-8.el9.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.48"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.34.1-5.el9.x86_64","release":"5.el9","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.34.1-5.el9.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.34.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Universally unique ID library","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.18-8.el9.x86_64","release":"8.el9","srpm_name":"popt","srpm_nevra":"popt-0:1.18-8.el9.src","summary":"C library for parsing command line parameters","version":"1.18"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.13-1.el9.x86_64","release":"1.el9","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.13-1.el9.src","summary":"Library providing XML and HTML support","version":"2.9.13"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.4.2-7.el9.x86_64","release":"7.el9","srpm_name":"libffi","srpm_nevra":"libffi-0:3.4.2-7.el9.src","summary":"A portable foreign function interface library","version":"3.4.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.24.1-2.el9.x86_64","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.24.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.42-5.el9.x86_64","release":"5.el9","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.42-5.el9.src","summary":"Library for error values used by GnuPG components","version":"1.42"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-8.1-4.el9.x86_64","release":"4.el9","srpm_name":"readline","srpm_nevra":"readline-0:8.1-4.el9.src","summary":"A library for editing typed command lines","version":"8.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.2.0-10.el9.x86_64","release":"10.el9","srpm_name":"gmp","srpm_nevra":"gmp-1:6.2.0-10.el9.src","summary":"A GNU arbitrary precision library","version":"6.2.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.14-11.el9.x86_64","release":"11.el9","srpm_name":"json-c","srpm_nevra":"json-c-0:0.14-11.el9.src","summary":"JSON implementation in C","version":"0.14"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Formatting library for ls-like programs.","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-11.2.1-9.4.el9.x86_64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GNU Standard C++ Library","version":"11.2.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.4.2-4.el9.x86_64","release":"4.el9","srpm_name":"lua","srpm_nevra":"lua-0:5.4.2-4.el9.src","summary":"Libraries for lua","version":"5.4.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.10.0-2.el9.x86_64","release":"2.el9","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.10.0-2.el9.src","summary":"A general-purpose cryptography library","version":"1.10.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.186-1.el9.x86_64","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Library to read and write ELF files","version":"0.186"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.39-8.el9.x86_64","release":"8.el9","srpm_name":"file","srpm_nevra":"file-0:5.39-8.el9.src","summary":"Libraries for applications using libmagic","version":"5.39"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.10-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"expat","srpm_nevra":"expat-0:2.2.10-12.el9_0.src","summary":"An XML parser library","version":"2.2.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.5.1-3.el9.x86_64","release":"3.el9","srpm_name":"attr","srpm_nevra":"attr-0:2.5.1-3.el9.src","summary":"Dynamic library for extended attribute support","version":"2.5.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.3.1-3.el9.x86_64","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Dynamic library for access control list support","version":"2.3.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.8.2-7.el9.x86_64","release":"7.el9","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.8.2-7.el9.src","summary":"Alternate posix capabilities library","version":"0.8.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0.7-101.el9_0.2.x86_64","release":"101.el9_0.2","srpm_name":"audit","srpm_nevra":"audit-0:3.0.7-101.el9_0.2.src","summary":"Dynamic library for libaudit","version":"3.0.7"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.46.5-2.el9.x86_64","release":"2.el9","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.46.5-2.el9.src","summary":"Common error description library","version":"1.46.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.9.3-5.el9.x86_64","release":"5.el9","srpm_name":"lz4","srpm_nevra":"lz4-0:1.9.3-5.el9.src","summary":"Libaries for lz4","version":"1.9.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.5-3.el9.x86_64","release":"3.el9","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.5-3.el9.src","summary":"GnuPG IPC library","version":"2.5.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.19-4.el9.x86_64","release":"4.el9","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.19-4.el9.src","summary":"Libraries files for gdbm","version":"1.19"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.6.1-4.el9.x86_64","release":"4.el9","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.6.1-4.el9.src","summary":"Key utilities library","version":"1.6.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-3.3-2.el9.x86_64","release":"2.el9","srpm_name":"libsepol","srpm_nevra":"libsepol-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.13-4.el9.x86_64","release":"4.el9","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.13-4.el9.src","summary":"Library for handling page faults in user mode","version":"2.13"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.16.0-7.el9.x86_64","release":"7.el9","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.16.0-7.el9.src","summary":"The ASN.1 library used in GNUTLS","version":"4.16.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.10-15.el9.x86_64","release":"15.el9","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.10-15.el9.src","summary":"GNU Unicode string library","version":"0.9.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.44-3.el9.3.x86_64","release":"3.el9.3","srpm_name":"pcre","srpm_nevra":"pcre-0:8.44-3.el9.3.src","summary":"Perl-compatible regular expression library","version":"8.44"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.6-5.el9.x86_64","release":"5.el9","srpm_name":"grep","srpm_nevra":"grep-0:3.6-5.el9.src","summary":"Pattern matching utilities","version":"3.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.37-3.el9.1.x86_64","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Perl-compatible regular expression library","version":"10.37"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-3.3-2.el9.x86_64","release":"2.el9","srpm_name":"libselinux","srpm_nevra":"libselinux-0:3.3-2.el9.src","summary":"SELinux library and simple utilities","version":"3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.32-31.el9.x86_64","release":"31.el9","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.32-31.el9.src","summary":"coreutils multicall binary","version":"8.32"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Block device ID library","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Device mounting library","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.8-9.el9.x86_64","release":"9.el9","srpm_name":"sed","srpm_nevra":"sed-0:4.8-9.el9.src","summary":"A GNU stream text editor","version":"4.8"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Partitioning library for fdisk-like programs.","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.10-9.el9_0.x86_64","release":"9.el9_0","srpm_name":"gzip","srpm_nevra":"gzip-0:1.10-9.el9_0.src","version":"1.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-27.el9.x86_64","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cracklib-dicts","nvra":"cracklib-dicts-2.9.6-27.el9.x86_64","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"The standard CrackLib dictionaries","version":"2.9.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-3.3-2.el9.x86_64","release":"2.el9","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.9-3.el9.x86_64","release":"3.el9","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.9-3.el9.src","summary":"Utilities for managing accounts and shadow password files","version":"4.9"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.2.1-6.el9.x86_64","release":"6.el9","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.2.1-6.el9.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.2.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.3.0-7.el9.x86_64","release":"7.el9","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.3.0-7.el9.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.3.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.3.1-3.el9.x86_64","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Access control list utilities","version":"2.3.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.18-1.el9.x86_64","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Comps XML file manipulation library","version":"0.1.18"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-4.1.0-7.el9.x86_64","release":"7.el9","srpm_name":"mpfr","srpm_nevra":"mpfr-0:4.1.0-7.el9.src","summary":"C library for multiple-precision floating-point computations","version":"4.1.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-5.1.0-6.el9.x86_64","release":"6.el9","srpm_name":"gawk","srpm_nevra":"gawk-0:5.1.0-6.el9.src","summary":"The GNU version of the AWK text processing utility","version":"5.1.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.7.3-2.el9.x86_64","release":"2.el9","srpm_name":"nettle","srpm_nevra":"nettle-0:3.7.3-2.el9.src","summary":"A low-level cryptographic library","version":"3.7.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.5.1-4.el9.x86_64","release":"4.el9","srpm_name":"libksba","srpm_nevra":"libksba-0:1.5.1-4.el9.src","summary":"CMS and X.509 library","version":"1.5.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"systemd-rpm-macros","nvra":"systemd-rpm-macros-250-6.el9_0.noarch","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"Macros that define paths and scriptlets related to systemd","version":"250"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"alternatives","nvra":"alternatives-1.20-2.el9.x86_64","release":"2.el9","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.20-2.el9.src","summary":"A tool to maintain symbolic links determining default commands","version":"1.20"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.24.1-2.el9.x86_64","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"System trust module from p11-kit","version":"0.24.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2020.2.50-94.el9.noarch","release":"94.el9","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2020.2.50-94.el9.src","summary":"The Mozilla CA root certificate bundle","version":"2020.2.50"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-3.0.1-23.el9_0.x86_64","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"A general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-250-6.el9_0.x86_64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd libraries","version":"250"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.7.3-9.el9.x86_64","release":"9.el9","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.7.3-9.el9.src","summary":"A TLS protocol implementation","version":"3.7.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.68.4-5.el9.x86_64","release":"5.el9","srpm_name":"glib2","srpm_nevra":"glib2-0:2.68.4-5.el9.src","summary":"A library of handy utility functions","version":"2.68.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.68.0-10.el9.x86_64","release":"10.el9","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.68.0-10.el9.src","summary":"Introspection system for GObject-based libraries","version":"1.68.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.6.6-1.el9.x86_64","release":"1.el9","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.6.6-1.el9.src","summary":"Library for JavaScript Object Notation format","version":"1.6.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-7.el9.x86_64","release":"7.el9","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-7.el9.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.20-5.el9.x86_64","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"Libraries for accessing D-BUS","version":"1.12.20"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"util-linux-core","nvra":"util-linux-core-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"The most essential utilities from the util-linux suite.","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-28-7.el9.x86_64","release":"7.el9","srpm_name":"kmod","srpm_nevra":"kmod-0:28-7.el9.src","summary":"Libraries to handle kernel module loading and unloading","version":"28"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.5.3-1.el9.x86_64","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"A library for handling streaming archive formats","version":"3.5.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"openssl","nvra":"openssl-3.0.1-23.el9_0.x86_64","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"Utilities from the general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pip-wheel","nvra":"python3-pip-wheel-21.2.3-6.el9.noarch","release":"6.el9","srpm_name":"python-pip","srpm_nevra":"python-pip-0:21.2.3-6.el9.src","summary":"The pip wheel","version":"21.2.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3","nvra":"python3-3.9.10-2.el9.x86_64","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python 3.9 interpreter","version":"3.9.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.9.10-2.el9.x86_64","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python runtime libraries","version":"3.9.10"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.18-2.el9.x86_64","release":"2.el9","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.18-2.el9.src","summary":"D-Bus bindings for python3","version":"1.2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.15.0-9.el9.noarch","release":"9.el9","srpm_name":"python-six","srpm_nevra":"python-six-0:1.15.0-9.el9.src","summary":"Python 2 and 3 compatibility utilities","version":"1.15.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.8.1-6.el9.noarch","release":"6.el9","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.8.1-6.el9.src","summary":"Powerful extensions to the standard datetime module","version":"2.8.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-45.el9.noarch","release":"45.el9","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-45.el9.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-idna","nvra":"python3-idna-2.10-7.el9.noarch","release":"7.el9","srpm_name":"python-idna","srpm_nevra":"python-idna-0:2.10-7.el9.src","summary":"Internationalized Domain Names in Applications (IDNA)","version":"2.10"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools","nvra":"python3-setuptools-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"Easily build and distribute Python 3 packages","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-25.el9.noarch","release":"25.el9","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-25.el9.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.18-1.el9.x86_64","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Python 3 bindings for libcomps library","version":"0.1.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-chardet","nvra":"python3-chardet-4.0.0-5.el9.noarch","release":"5.el9","srpm_name":"python-chardet","srpm_nevra":"python-chardet-0:4.0.0-5.el9.src","summary":"Character encoding auto-detection in Python","version":"4.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.4.2-6.el9.noarch","release":"6.el9","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.4.2-6.el9.src","summary":"Module to simplify usage of decorators in python3","version":"4.4.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.40.1-5.el9.x86_64","release":"5.el9","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.40.1-5.el9.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.40.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libxml2","nvra":"python3-libxml2-2.9.13-1.el9.x86_64","release":"1.el9","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.13-1.el9.src","summary":"Python 3 bindings for the libxml2 library","version":"2.9.13"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-dmidecode","nvra":"python3-dmidecode-3.12.2-27.el9.x86_64","release":"27.el9","srpm_name":"python-dmidecode","srpm_nevra":"python-dmidecode-0:3.12.2-27.el9.src","summary":"Python 3 module to access DMI data","version":"3.12.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pysocks","nvra":"python3-pysocks-1.7.1-12.el9.noarch","release":"12.el9","srpm_name":"python-pysocks","srpm_nevra":"python-pysocks-0:1.7.1-12.el9.src","summary":"A Python SOCKS client module","version":"1.7.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-urllib3","nvra":"python3-urllib3-1.26.5-3.el9.noarch","release":"3.el9","srpm_name":"python-urllib3","srpm_nevra":"python-urllib3-0:1.26.5-3.el9.src","summary":"Python3 HTTP library with thread-safe connection pooling and file post","version":"1.26.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-requests","nvra":"python3-requests-2.25.1-6.el9.noarch","release":"6.el9","srpm_name":"python-requests","srpm_nevra":"python-requests-0:2.25.1-6.el9.src","summary":"HTTP library, written in Python, for human beings","version":"2.25.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-cloud-what","nvra":"python3-cloud-what-1.29.26-3.el9_0.x86_64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Python package for detection of public cloud provider","version":"1.29.26"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dmidecode","nvra":"dmidecode-3.3-7.el9.x86_64","release":"7.el9","srpm_name":"dmidecode","srpm_nevra":"dmidecode-1:3.3-7.el9.src","summary":"Tool to analyse BIOS DMI data","version":"3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-53.el9.x86_64","release":"53.el9","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-53.el9.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libeconf","nvra":"libeconf-0.4.1-2.el9.x86_64","release":"2.el9","srpm_name":"libeconf","srpm_nevra":"libeconf-0:0.4.1-2.el9.src","summary":"Enhanced config file parser library","version":"0.4.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.4-8.el9.x86_64","release":"8.el9","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.4-8.el9.src","summary":"A library for password generation and password quality checking","version":"1.4.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.5.1-9.el9.x86_64","release":"9.el9","srpm_name":"pam","srpm_nevra":"pam-0:1.5.1-9.el9.src","summary":"An extensible library which provides authentication for applications","version":"1.5.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.37.4-3.el9.x86_64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"A collection of basic system utilities","version":"2.37.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libgomp","nvra":"libgomp-11.2.1-9.4.el9.x86_64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC OpenMP v4.5 shared support library","version":"11.2.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.43.0-5.el9.x86_64","release":"5.el9","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.43.0-5.el9.src","summary":"A library implementing the HTTP/2 protocol","version":"1.43.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.5.0-10.el9.x86_64","release":"10.el9","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.5.0-10.el9.src","summary":"Convenience library for kernel netlink sockets","version":"3.5.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.15-2.el9.x86_64","release":"2.el9","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.15-2.el9.src","summary":"Python module to interface with ethtool","version":"0.15"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.5.2-2.el9.x86_64","release":"2.el9","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.5.2-2.el9.src","summary":"Enhanced seccomp library","version":"2.5.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.183-4.el9.x86_64","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device mapper utility","version":"1.02.183"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.183-4.el9.x86_64","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device-mapper shared library","version":"1.02.183"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.4.3-4.el9.x86_64","release":"4.el9","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.4.3-4.el9.src","summary":"Cryptsetup shared library","version":"2.4.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.20-5.el9.x86_64","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus","version":"1.12.20"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-250-6.el9_0.x86_64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd PAM module","version":"250"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-250-6.el9_0.x86_64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"System and Service Manager","version":"250"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.20-5.el9.noarch","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus configuration","version":"1.12.20"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"dbus-broker","nvra":"dbus-broker-28-5.el9.x86_64","release":"5.el9","srpm_name":"dbus-broker","srpm_nevra":"dbus-broker-0:28-5.el9.src","summary":"Linux D-Bus Message Broker","version":"28"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.186-1.el9.noarch","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Default yama attach scope sysctl setting","version":"0.186"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.186-1.el9.x86_64","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Libraries to handle compiled objects","version":"0.186"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.2-3.el9.x86_64","release":"3.el9","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.2-3.el9.src","summary":"Main loop abstraction library","version":"0.3.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.19.1-15.el9_0.x86_64","release":"15.el9_0","srpm_name":"krb5","srpm_nevra":"krb5-0:1.19.1-15.el9_0.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.19.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libcurl-minimal","nvra":"libcurl-minimal-7.76.1-14.el9.x86_64","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of libcurl for minimal installations","version":"7.76.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"curl-minimal","nvra":"curl-minimal-7.76.1-14.el9.x86_64","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of curl for minimal installations","version":"7.76.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.16.1.3-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"The RPM package management system","version":"4.16.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.16.1.3-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for manipulating RPM packages","version":"4.16.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.7.20-2.el9.x86_64","release":"2.el9","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.7.20-2.el9.src","summary":"Package dependency solver","version":"0.7.20"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.16.1.3-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for building RPM packages","version":"4.16.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"tpm2-tss","nvra":"tpm2-tss-3.0.3-7.el9.x86_64","release":"7.el9","srpm_name":"tpm2-tss","srpm_nevra":"tpm2-tss-0:3.0.3-7.el9.src","summary":"TPM2.0 Software Stack","version":"3.0.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.4-4.el9.x86_64","release":"4.el9","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.4-4.el9.src","summary":"IMA/EVM support utilities","version":"1.4"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-20.el9.x86_64","release":"20.el9","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-20.el9.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.59-4.el9_0.x86_64","release":"4.el9_0","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.59-4.el9_0.src","summary":"LDAP support libraries","version":"2.4.59"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.63-10.el9.x86_64","release":"10.el9","srpm_name":"libuser","srpm_nevra":"libuser-0:0.63-10.el9.src","summary":"A user and group account administration library","version":"0.63"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-12.el9.x86_64","release":"12.el9","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-12.el9.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.114-4.el9.x86_64","release":"4.el9","srpm_name":"usermode","srpm_nevra":"usermode-0:1.114-4.el9.src","summary":"Tools for certain user account management tasks","version":"1.114"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.2.5-7.el9.x86_64","release":"7.el9","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.2.5-7.el9.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.2.5"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libmodulemd","nvra":"libmodulemd-2.13.0-2.el9.x86_64","release":"2.el9","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.13.0-2.el9.src","summary":"Module metadata manipulation library","version":"2.13.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.6-8.el9.x86_64","release":"8.el9","srpm_name":"npth","srpm_nevra":"npth-0:1.6-8.el9.src","summary":"The New GNU Portable Threads library","version":"1.6"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.3.3-1.el9.x86_64","release":"1.el9","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.3.3-1.el9.src","summary":"Utility for secure communication and data storage","version":"2.3.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.15.1-6.el9.x86_64","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.15.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.14.2-1.el9.x86_64","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Repodata downloading library","version":"1.14.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.65.0-5.el9_0.x86_64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.65.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.65.0-5.el9_0.x86_64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.65.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.65.0-5.el9_0.x86_64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.65.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.14.2-1.el9.x86_64","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Python 3 bindings for the librepo library","version":"1.14.2"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.15.1-6.el9.x86_64","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"gpgme bindings for Python 3","version":"1.15.1"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"rpm-sign-libs","nvra":"rpm-sign-libs-4.16.1.3-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for signing RPM packages","version":"4.16.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.16.1.3-12.el9_0.x86_64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.16.1.3"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.29.26-3.el9_0.x86_64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-27.el9.x86_64","release":"27.el9","srpm_name":"which","srpm_nevra":"which-0:2.21-27.el9.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.21-2.el9.2.x86_64","release":"2.el9.2","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.21-2.el9.2.src","summary":"Detect if we are running in a virtual machine","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.15.2-6.el9.noarch","release":"6.el9","srpm_name":"libreport","srpm_nevra":"libreport-0:2.15.2-6.el9.src","summary":"Filesystem layout for libreport","version":"2.15.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Common data and configuration files for DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Python 3 interface to DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"libdnf-plugin-subscription-manager","nvra":"libdnf-plugin-subscription-manager-1.29.26-3.el9_0.x86_64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Subscription Manager plugin for libdnf","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.24-4.el9_0.noarch","release":"4.el9_0","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.24-4.el9_0.src","summary":"Core Plugins for DNF","version":"4.0.24"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"fonts-filesystem","nvra":"fonts-filesystem-2.0.5-7.el9.1.noarch","release":"7.el9.1","srpm_name":"fonts-rpm-macros","srpm_nevra":"fonts-rpm-macros-1:2.0.5-7.el9.1.src","summary":"Directories used by font packages","version":"2.0.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dejavu-sans-fonts","nvra":"dejavu-sans-fonts-2.37-18.el9.noarch","release":"18.el9","srpm_name":"dejavu-fonts","srpm_nevra":"dejavu-fonts-0:2.37-18.el9.src","summary":"DejaVu Sans, a variable-width sans-serif font family","version":"2.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-font-en","nvra":"langpacks-core-font-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English core font meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-en","nvra":"langpacks-core-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks core meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks meta-package","version":"3.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.29.26-3.el9_0.x86_64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Tools and libraries for subscription and repository management","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies-scripts","nvra":"crypto-policies-scripts-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"Tool to switch between crypto policies","version":"20220223"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.8.0-5.el9.x86_64","release":"5.el9","srpm_name":"findutils","srpm_nevra":"findutils-1:4.8.0-5.el9.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.8.0"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.34-3.el9.x86_64","release":"3.el9","srpm_name":"tar","srpm_nevra":"tar-2:1.34-3.el9.src","summary":"GNU file archiving program","version":"1.34"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.2.2637-15.el9.x86_64","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"A minimal version of the VIM editor","version":"8.2.2637"},{"architecture":"x86_64","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-10.2-9.el9.x86_64","release":"9.el9","srpm_name":"gdb","srpm_nevra":"gdb-0:10.2-9.el9.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"10.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"rootfiles","nvra":"rootfiles-8.1-31.el9.noarch","release":"31.el9","srpm_name":"rootfiles","srpm_nevra":"rootfiles-0:8.1-31.el9.src","summary":"The basic required files for the root user's directory","version":"8.1"}],"_links":{"image":{"href":"/v1/images/id/6270e0fc80cc9b3025076e80"}}} +-- catalog.redhat.com/api/containers/v1/images/id/6270e0ff80cc9b3025076e8c/rpm-manifest -- +{"_id":"6270e10080cc9b3025076e92","creation_date":"2022-05-03T08:00:00.768000+00:00","image_id":"6270e0ff80cc9b3025076e8c","last_update_date":"2023-06-04T00:33:44.818000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-11.2.1-9.4.el9.ppc64le","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC version 11 shared support library","version":"11.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"System-wide crypto policies","version":"20220223"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2022a-1.el9_0.noarch","release":"1.el9_0","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2022a-1.el9_0.src","summary":"Timezone data","version":"2022a"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.29.26-3.el9_0.ppc64le","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-9.0-2.17.el9.ppc64le","release":"2.17.el9","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:9.0-2.17.el9.src","summary":"Red Hat Enterprise Linux release file","version":"9.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.13.7-6.el9.noarch","release":"6.el9","srpm_name":"setup","srpm_nevra":"setup-0:2.13.7-6.el9.src","summary":"A set of system configuration and setup files","version":"2.13.7"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.16-2.el9.ppc64le","release":"2.el9","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.16-2.el9.src","summary":"The basic directory layout for a Linux system","version":"3.16"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-13.el9.noarch","release":"13.el9","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-13.el9.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools-wheel","nvra":"python3-setuptools-wheel-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"The setuptools wheel","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pcre2-syntax","nvra":"pcre2-syntax-10.37-3.el9.1.noarch","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Documentation for PCRE2 regular expressions","version":"10.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.2-8.20210508.el9.noarch","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Descriptions of common terminals","version":"6.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.34-28.el9_0.ppc64le","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Minimal language packs for glibc.","version":"2.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.34-28.el9_0.ppc64le","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Common binaries and locale data for glibc","version":"2.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.34-28.el9_0.ppc64le","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The GNU libc libraries","version":"2.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.2-8.20210508.el9.ppc64le","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses libraries","version":"6.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-5.1.8-4.el9.ppc64le","release":"4.el9","srpm_name":"bash","srpm_nevra":"bash-0:5.1.8-4.el9.src","summary":"The GNU Bourne Again shell","version":"5.1.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-31.el9_0.1.ppc64le","release":"31.el9_0.1","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-31.el9_0.1.src","summary":"Compression and decompression library","version":"1.2.11"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.5-7.el9.ppc64le","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"Libraries for decoding LZMA compression","version":"5.2.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.8-8.el9.ppc64le","release":"8.el9","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.8-8.el9.src","summary":"Libraries for applications using bzip2","version":"1.0.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libzstd","nvra":"libzstd-1.5.1-2.el9.ppc64le","release":"2.el9","srpm_name":"zstd","srpm_nevra":"zstd-0:1.5.1-2.el9.src","summary":"Zstd shared library","version":"1.5.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.4.18-3.el9.ppc64le","release":"3.el9","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.4.18-3.el9.src","summary":"Extended crypt library for descrypt, md5crypt, bcrypt, and others","version":"4.4.18"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.48-8.el9.ppc64le","release":"8.el9","srpm_name":"libcap","srpm_nevra":"libcap-0:2.48-8.el9.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.48"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.34.1-5.el9.ppc64le","release":"5.el9","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.34.1-5.el9.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.34.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Universally unique ID library","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.18-8.el9.ppc64le","release":"8.el9","srpm_name":"popt","srpm_nevra":"popt-0:1.18-8.el9.src","summary":"C library for parsing command line parameters","version":"1.18"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.4.2-7.el9.ppc64le","release":"7.el9","srpm_name":"libffi","srpm_nevra":"libffi-0:3.4.2-7.el9.src","summary":"A portable foreign function interface library","version":"3.4.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.24.1-2.el9.ppc64le","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.24.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.42-5.el9.ppc64le","release":"5.el9","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.42-5.el9.src","summary":"Library for error values used by GnuPG components","version":"1.42"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.13-1.el9.ppc64le","release":"1.el9","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.13-1.el9.src","summary":"Library providing XML and HTML support","version":"2.9.13"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-8.1-4.el9.ppc64le","release":"4.el9","srpm_name":"readline","srpm_nevra":"readline-0:8.1-4.el9.src","summary":"A library for editing typed command lines","version":"8.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.2.0-10.el9.ppc64le","release":"10.el9","srpm_name":"gmp","srpm_nevra":"gmp-1:6.2.0-10.el9.src","summary":"A GNU arbitrary precision library","version":"6.2.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.14-11.el9.ppc64le","release":"11.el9","srpm_name":"json-c","srpm_nevra":"json-c-0:0.14-11.el9.src","summary":"JSON implementation in C","version":"0.14"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Formatting library for ls-like programs.","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-11.2.1-9.4.el9.ppc64le","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GNU Standard C++ Library","version":"11.2.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.4.2-4.el9.ppc64le","release":"4.el9","srpm_name":"lua","srpm_nevra":"lua-0:5.4.2-4.el9.src","summary":"Libraries for lua","version":"5.4.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.10.0-2.el9.ppc64le","release":"2.el9","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.10.0-2.el9.src","summary":"A general-purpose cryptography library","version":"1.10.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.186-1.el9.ppc64le","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Library to read and write ELF files","version":"0.186"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.39-8.el9.ppc64le","release":"8.el9","srpm_name":"file","srpm_nevra":"file-0:5.39-8.el9.src","summary":"Libraries for applications using libmagic","version":"5.39"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.10-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"expat","srpm_nevra":"expat-0:2.2.10-12.el9_0.src","summary":"An XML parser library","version":"2.2.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.5.1-3.el9.ppc64le","release":"3.el9","srpm_name":"attr","srpm_nevra":"attr-0:2.5.1-3.el9.src","summary":"Dynamic library for extended attribute support","version":"2.5.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.3.1-3.el9.ppc64le","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Dynamic library for access control list support","version":"2.3.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.8.2-7.el9.ppc64le","release":"7.el9","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.8.2-7.el9.src","summary":"Alternate posix capabilities library","version":"0.8.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0.7-101.el9_0.2.ppc64le","release":"101.el9_0.2","srpm_name":"audit","srpm_nevra":"audit-0:3.0.7-101.el9_0.2.src","summary":"Dynamic library for libaudit","version":"3.0.7"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.46.5-2.el9.ppc64le","release":"2.el9","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.46.5-2.el9.src","summary":"Common error description library","version":"1.46.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.9.3-5.el9.ppc64le","release":"5.el9","srpm_name":"lz4","srpm_nevra":"lz4-0:1.9.3-5.el9.src","summary":"Libaries for lz4","version":"1.9.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.5-3.el9.ppc64le","release":"3.el9","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.5-3.el9.src","summary":"GnuPG IPC library","version":"2.5.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.19-4.el9.ppc64le","release":"4.el9","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.19-4.el9.src","summary":"Libraries files for gdbm","version":"1.19"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.6.1-4.el9.ppc64le","release":"4.el9","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.6.1-4.el9.src","summary":"Key utilities library","version":"1.6.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-3.3-2.el9.ppc64le","release":"2.el9","srpm_name":"libsepol","srpm_nevra":"libsepol-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.13-4.el9.ppc64le","release":"4.el9","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.13-4.el9.src","summary":"Library for handling page faults in user mode","version":"2.13"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.16.0-7.el9.ppc64le","release":"7.el9","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.16.0-7.el9.src","summary":"The ASN.1 library used in GNUTLS","version":"4.16.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.10-15.el9.ppc64le","release":"15.el9","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.10-15.el9.src","summary":"GNU Unicode string library","version":"0.9.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.44-3.el9.3.ppc64le","release":"3.el9.3","srpm_name":"pcre","srpm_nevra":"pcre-0:8.44-3.el9.3.src","summary":"Perl-compatible regular expression library","version":"8.44"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.6-5.el9.ppc64le","release":"5.el9","srpm_name":"grep","srpm_nevra":"grep-0:3.6-5.el9.src","summary":"Pattern matching utilities","version":"3.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.37-3.el9.1.ppc64le","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Perl-compatible regular expression library","version":"10.37"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-3.3-2.el9.ppc64le","release":"2.el9","srpm_name":"libselinux","srpm_nevra":"libselinux-0:3.3-2.el9.src","summary":"SELinux library and simple utilities","version":"3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.32-31.el9.ppc64le","release":"31.el9","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.32-31.el9.src","summary":"coreutils multicall binary","version":"8.32"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Block device ID library","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Device mounting library","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.8-9.el9.ppc64le","release":"9.el9","srpm_name":"sed","srpm_nevra":"sed-0:4.8-9.el9.src","summary":"A GNU stream text editor","version":"4.8"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Partitioning library for fdisk-like programs.","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.10-9.el9_0.ppc64le","release":"9.el9_0","srpm_name":"gzip","srpm_nevra":"gzip-0:1.10-9.el9_0.src","version":"1.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-27.el9.ppc64le","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cracklib-dicts","nvra":"cracklib-dicts-2.9.6-27.el9.ppc64le","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"The standard CrackLib dictionaries","version":"2.9.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-3.3-2.el9.ppc64le","release":"2.el9","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.9-3.el9.ppc64le","release":"3.el9","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.9-3.el9.src","summary":"Utilities for managing accounts and shadow password files","version":"4.9"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.2.1-6.el9.ppc64le","release":"6.el9","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.2.1-6.el9.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.2.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.3.0-7.el9.ppc64le","release":"7.el9","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.3.0-7.el9.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.3.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.3.1-3.el9.ppc64le","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Access control list utilities","version":"2.3.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.18-1.el9.ppc64le","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Comps XML file manipulation library","version":"0.1.18"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-4.1.0-7.el9.ppc64le","release":"7.el9","srpm_name":"mpfr","srpm_nevra":"mpfr-0:4.1.0-7.el9.src","summary":"C library for multiple-precision floating-point computations","version":"4.1.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-5.1.0-6.el9.ppc64le","release":"6.el9","srpm_name":"gawk","srpm_nevra":"gawk-0:5.1.0-6.el9.src","summary":"The GNU version of the AWK text processing utility","version":"5.1.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.7.3-2.el9.ppc64le","release":"2.el9","srpm_name":"nettle","srpm_nevra":"nettle-0:3.7.3-2.el9.src","summary":"A low-level cryptographic library","version":"3.7.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.5.1-4.el9.ppc64le","release":"4.el9","srpm_name":"libksba","srpm_nevra":"libksba-0:1.5.1-4.el9.src","summary":"CMS and X.509 library","version":"1.5.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"systemd-rpm-macros","nvra":"systemd-rpm-macros-250-6.el9_0.noarch","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"Macros that define paths and scriptlets related to systemd","version":"250"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"alternatives","nvra":"alternatives-1.20-2.el9.ppc64le","release":"2.el9","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.20-2.el9.src","summary":"A tool to maintain symbolic links determining default commands","version":"1.20"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.24.1-2.el9.ppc64le","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"System trust module from p11-kit","version":"0.24.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2020.2.50-94.el9.noarch","release":"94.el9","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2020.2.50-94.el9.src","summary":"The Mozilla CA root certificate bundle","version":"2020.2.50"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-3.0.1-23.el9_0.ppc64le","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"A general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-250-6.el9_0.ppc64le","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd libraries","version":"250"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.7.3-9.el9.ppc64le","release":"9.el9","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.7.3-9.el9.src","summary":"A TLS protocol implementation","version":"3.7.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.68.4-5.el9.ppc64le","release":"5.el9","srpm_name":"glib2","srpm_nevra":"glib2-0:2.68.4-5.el9.src","summary":"A library of handy utility functions","version":"2.68.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.68.0-10.el9.ppc64le","release":"10.el9","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.68.0-10.el9.src","summary":"Introspection system for GObject-based libraries","version":"1.68.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.6.6-1.el9.ppc64le","release":"1.el9","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.6.6-1.el9.src","summary":"Library for JavaScript Object Notation format","version":"1.6.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-7.el9.ppc64le","release":"7.el9","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-7.el9.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.20-5.el9.ppc64le","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"Libraries for accessing D-BUS","version":"1.12.20"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"util-linux-core","nvra":"util-linux-core-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"The most essential utilities from the util-linux suite.","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-28-7.el9.ppc64le","release":"7.el9","srpm_name":"kmod","srpm_nevra":"kmod-0:28-7.el9.src","summary":"Libraries to handle kernel module loading and unloading","version":"28"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.5.3-1.el9.ppc64le","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"A library for handling streaming archive formats","version":"3.5.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"openssl","nvra":"openssl-3.0.1-23.el9_0.ppc64le","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"Utilities from the general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pip-wheel","nvra":"python3-pip-wheel-21.2.3-6.el9.noarch","release":"6.el9","srpm_name":"python-pip","srpm_nevra":"python-pip-0:21.2.3-6.el9.src","summary":"The pip wheel","version":"21.2.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3","nvra":"python3-3.9.10-2.el9.ppc64le","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python 3.9 interpreter","version":"3.9.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.9.10-2.el9.ppc64le","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python runtime libraries","version":"3.9.10"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.18-2.el9.ppc64le","release":"2.el9","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.18-2.el9.src","summary":"D-Bus bindings for python3","version":"1.2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.15.0-9.el9.noarch","release":"9.el9","srpm_name":"python-six","srpm_nevra":"python-six-0:1.15.0-9.el9.src","summary":"Python 2 and 3 compatibility utilities","version":"1.15.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.8.1-6.el9.noarch","release":"6.el9","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.8.1-6.el9.src","summary":"Powerful extensions to the standard datetime module","version":"2.8.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-45.el9.noarch","release":"45.el9","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-45.el9.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-idna","nvra":"python3-idna-2.10-7.el9.noarch","release":"7.el9","srpm_name":"python-idna","srpm_nevra":"python-idna-0:2.10-7.el9.src","summary":"Internationalized Domain Names in Applications (IDNA)","version":"2.10"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools","nvra":"python3-setuptools-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"Easily build and distribute Python 3 packages","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-25.el9.noarch","release":"25.el9","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-25.el9.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.18-1.el9.ppc64le","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Python 3 bindings for libcomps library","version":"0.1.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-chardet","nvra":"python3-chardet-4.0.0-5.el9.noarch","release":"5.el9","srpm_name":"python-chardet","srpm_nevra":"python-chardet-0:4.0.0-5.el9.src","summary":"Character encoding auto-detection in Python","version":"4.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.4.2-6.el9.noarch","release":"6.el9","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.4.2-6.el9.src","summary":"Module to simplify usage of decorators in python3","version":"4.4.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.40.1-5.el9.ppc64le","release":"5.el9","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.40.1-5.el9.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.40.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pysocks","nvra":"python3-pysocks-1.7.1-12.el9.noarch","release":"12.el9","srpm_name":"python-pysocks","srpm_nevra":"python-pysocks-0:1.7.1-12.el9.src","summary":"A Python SOCKS client module","version":"1.7.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-urllib3","nvra":"python3-urllib3-1.26.5-3.el9.noarch","release":"3.el9","srpm_name":"python-urllib3","srpm_nevra":"python-urllib3-0:1.26.5-3.el9.src","summary":"Python3 HTTP library with thread-safe connection pooling and file post","version":"1.26.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-requests","nvra":"python3-requests-2.25.1-6.el9.noarch","release":"6.el9","srpm_name":"python-requests","srpm_nevra":"python-requests-0:2.25.1-6.el9.src","summary":"HTTP library, written in Python, for human beings","version":"2.25.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-cloud-what","nvra":"python3-cloud-what-1.29.26-3.el9_0.ppc64le","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Python package for detection of public cloud provider","version":"1.29.26"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-53.el9.ppc64le","release":"53.el9","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-53.el9.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libeconf","nvra":"libeconf-0.4.1-2.el9.ppc64le","release":"2.el9","srpm_name":"libeconf","srpm_nevra":"libeconf-0:0.4.1-2.el9.src","summary":"Enhanced config file parser library","version":"0.4.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.4-8.el9.ppc64le","release":"8.el9","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.4-8.el9.src","summary":"A library for password generation and password quality checking","version":"1.4.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.5.1-9.el9.ppc64le","release":"9.el9","srpm_name":"pam","srpm_nevra":"pam-0:1.5.1-9.el9.src","summary":"An extensible library which provides authentication for applications","version":"1.5.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libgomp","nvra":"libgomp-11.2.1-9.4.el9.ppc64le","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC OpenMP v4.5 shared support library","version":"11.2.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.43.0-5.el9.ppc64le","release":"5.el9","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.43.0-5.el9.src","summary":"A library implementing the HTTP/2 protocol","version":"1.43.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.5.0-10.el9.ppc64le","release":"10.el9","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.5.0-10.el9.src","summary":"Convenience library for kernel netlink sockets","version":"3.5.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.15-2.el9.ppc64le","release":"2.el9","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.15-2.el9.src","summary":"Python module to interface with ethtool","version":"0.15"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"librtas","nvra":"librtas-2.0.2-14.el9.ppc64le","release":"14.el9","srpm_name":"librtas","srpm_nevra":"librtas-0:2.0.2-14.el9.src","summary":"Libraries to provide access to RTAS calls and RTAS events","version":"2.0.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.37.4-3.el9.ppc64le","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"A collection of basic system utilities","version":"2.37.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.5.2-2.el9.ppc64le","release":"2.el9","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.5.2-2.el9.src","summary":"Enhanced seccomp library","version":"2.5.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.183-4.el9.ppc64le","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device mapper utility","version":"1.02.183"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.183-4.el9.ppc64le","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device-mapper shared library","version":"1.02.183"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.4.3-4.el9.ppc64le","release":"4.el9","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.4.3-4.el9.src","summary":"Cryptsetup shared library","version":"2.4.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.20-5.el9.ppc64le","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus","version":"1.12.20"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-250-6.el9_0.ppc64le","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd PAM module","version":"250"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-250-6.el9_0.ppc64le","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"System and Service Manager","version":"250"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.20-5.el9.noarch","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus configuration","version":"1.12.20"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"dbus-broker","nvra":"dbus-broker-28-5.el9.ppc64le","release":"5.el9","srpm_name":"dbus-broker","srpm_nevra":"dbus-broker-0:28-5.el9.src","summary":"Linux D-Bus Message Broker","version":"28"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.186-1.el9.noarch","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Default yama attach scope sysctl setting","version":"0.186"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.186-1.el9.ppc64le","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Libraries to handle compiled objects","version":"0.186"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.2-3.el9.ppc64le","release":"3.el9","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.2-3.el9.src","summary":"Main loop abstraction library","version":"0.3.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.19.1-15.el9_0.ppc64le","release":"15.el9_0","srpm_name":"krb5","srpm_nevra":"krb5-0:1.19.1-15.el9_0.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.19.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libcurl-minimal","nvra":"libcurl-minimal-7.76.1-14.el9.ppc64le","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of libcurl for minimal installations","version":"7.76.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"curl-minimal","nvra":"curl-minimal-7.76.1-14.el9.ppc64le","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of curl for minimal installations","version":"7.76.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.16.1.3-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"The RPM package management system","version":"4.16.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.16.1.3-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for manipulating RPM packages","version":"4.16.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.7.20-2.el9.ppc64le","release":"2.el9","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.7.20-2.el9.src","summary":"Package dependency solver","version":"0.7.20"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.16.1.3-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for building RPM packages","version":"4.16.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"tpm2-tss","nvra":"tpm2-tss-3.0.3-7.el9.ppc64le","release":"7.el9","srpm_name":"tpm2-tss","srpm_nevra":"tpm2-tss-0:3.0.3-7.el9.src","summary":"TPM2.0 Software Stack","version":"3.0.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.4-4.el9.ppc64le","release":"4.el9","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.4-4.el9.src","summary":"IMA/EVM support utilities","version":"1.4"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-20.el9.ppc64le","release":"20.el9","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-20.el9.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.59-4.el9_0.ppc64le","release":"4.el9_0","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.59-4.el9_0.src","summary":"LDAP support libraries","version":"2.4.59"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.63-10.el9.ppc64le","release":"10.el9","srpm_name":"libuser","srpm_nevra":"libuser-0:0.63-10.el9.src","summary":"A user and group account administration library","version":"0.63"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-12.el9.ppc64le","release":"12.el9","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-12.el9.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.114-4.el9.ppc64le","release":"4.el9","srpm_name":"usermode","srpm_nevra":"usermode-0:1.114-4.el9.src","summary":"Tools for certain user account management tasks","version":"1.114"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.2.5-7.el9.ppc64le","release":"7.el9","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.2.5-7.el9.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.2.5"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libmodulemd","nvra":"libmodulemd-2.13.0-2.el9.ppc64le","release":"2.el9","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.13.0-2.el9.src","summary":"Module metadata manipulation library","version":"2.13.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.6-8.el9.ppc64le","release":"8.el9","srpm_name":"npth","srpm_nevra":"npth-0:1.6-8.el9.src","summary":"The New GNU Portable Threads library","version":"1.6"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.3.3-1.el9.ppc64le","release":"1.el9","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.3.3-1.el9.src","summary":"Utility for secure communication and data storage","version":"2.3.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.15.1-6.el9.ppc64le","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.15.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.14.2-1.el9.ppc64le","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Repodata downloading library","version":"1.14.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.65.0-5.el9_0.ppc64le","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.65.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.65.0-5.el9_0.ppc64le","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.65.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.65.0-5.el9_0.ppc64le","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.65.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.14.2-1.el9.ppc64le","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Python 3 bindings for the librepo library","version":"1.14.2"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.15.1-6.el9.ppc64le","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"gpgme bindings for Python 3","version":"1.15.1"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"rpm-sign-libs","nvra":"rpm-sign-libs-4.16.1.3-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for signing RPM packages","version":"4.16.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.16.1.3-12.el9_0.ppc64le","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.16.1.3"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.29.26-3.el9_0.ppc64le","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-27.el9.ppc64le","release":"27.el9","srpm_name":"which","srpm_nevra":"which-0:2.21-27.el9.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.21-2.el9.2.ppc64le","release":"2.el9.2","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.21-2.el9.2.src","summary":"Detect if we are running in a virtual machine","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.15.2-6.el9.noarch","release":"6.el9","srpm_name":"libreport","srpm_nevra":"libreport-0:2.15.2-6.el9.src","summary":"Filesystem layout for libreport","version":"2.15.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Common data and configuration files for DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Python 3 interface to DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"libdnf-plugin-subscription-manager","nvra":"libdnf-plugin-subscription-manager-1.29.26-3.el9_0.ppc64le","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Subscription Manager plugin for libdnf","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.24-4.el9_0.noarch","release":"4.el9_0","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.24-4.el9_0.src","summary":"Core Plugins for DNF","version":"4.0.24"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"fonts-filesystem","nvra":"fonts-filesystem-2.0.5-7.el9.1.noarch","release":"7.el9.1","srpm_name":"fonts-rpm-macros","srpm_nevra":"fonts-rpm-macros-1:2.0.5-7.el9.1.src","summary":"Directories used by font packages","version":"2.0.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dejavu-sans-fonts","nvra":"dejavu-sans-fonts-2.37-18.el9.noarch","release":"18.el9","srpm_name":"dejavu-fonts","srpm_nevra":"dejavu-fonts-0:2.37-18.el9.src","summary":"DejaVu Sans, a variable-width sans-serif font family","version":"2.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-font-en","nvra":"langpacks-core-font-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English core font meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-en","nvra":"langpacks-core-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks core meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks meta-package","version":"3.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.29.26-3.el9_0.ppc64le","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Tools and libraries for subscription and repository management","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies-scripts","nvra":"crypto-policies-scripts-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"Tool to switch between crypto policies","version":"20220223"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.8.0-5.el9.ppc64le","release":"5.el9","srpm_name":"findutils","srpm_nevra":"findutils-1:4.8.0-5.el9.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.8.0"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.34-3.el9.ppc64le","release":"3.el9","srpm_name":"tar","srpm_nevra":"tar-2:1.34-3.el9.src","summary":"GNU file archiving program","version":"1.34"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.2.2637-15.el9.ppc64le","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"A minimal version of the VIM editor","version":"8.2.2637"},{"architecture":"ppc64le","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-10.2-9.el9.ppc64le","release":"9.el9","srpm_name":"gdb","srpm_nevra":"gdb-0:10.2-9.el9.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"10.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"rootfiles","nvra":"rootfiles-8.1-31.el9.noarch","release":"31.el9","srpm_name":"rootfiles","srpm_nevra":"rootfiles-0:8.1-31.el9.src","summary":"The basic required files for the root user's directory","version":"8.1"}],"_links":{"image":{"href":"/v1/images/id/6270e0ff80cc9b3025076e8c"}}} +-- catalog.redhat.com/api/containers/v1/images/id/6270e10180cc9b3025076e97/rpm-manifest -- +{"_id":"6270e10380cc9b3025076e9d","creation_date":"2022-05-03T08:00:03.050000+00:00","image_id":"6270e10180cc9b3025076e97","last_update_date":"2023-06-04T00:33:45.107000+00:00","object_type":"containerImageRPMManifest","rpms":[{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgcc","nvra":"libgcc-11.2.1-9.4.el9.aarch64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC version 11 shared support library","version":"11.2.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies","nvra":"crypto-policies-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"System-wide crypto policies","version":"20220223"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"tzdata","nvra":"tzdata-2022a-1.el9_0.noarch","release":"1.el9_0","srpm_name":"tzdata","srpm_nevra":"tzdata-0:2022a-1.el9_0.src","summary":"Timezone data","version":"2022a"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"subscription-manager-rhsm-certificates","nvra":"subscription-manager-rhsm-certificates-1.29.26-3.el9_0.aarch64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Certificates required to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"redhat-release","nvra":"redhat-release-9.0-2.17.el9.aarch64","release":"2.17.el9","srpm_name":"redhat-release","srpm_nevra":"redhat-release-0:9.0-2.17.el9.src","summary":"Red Hat Enterprise Linux release file","version":"9.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"setup","nvra":"setup-2.13.7-6.el9.noarch","release":"6.el9","srpm_name":"setup","srpm_nevra":"setup-0:2.13.7-6.el9.src","summary":"A set of system configuration and setup files","version":"2.13.7"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"filesystem","nvra":"filesystem-3.16-2.el9.aarch64","release":"2.el9","srpm_name":"filesystem","srpm_nevra":"filesystem-0:3.16-2.el9.src","summary":"The basic directory layout for a Linux system","version":"3.16"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"basesystem","nvra":"basesystem-11-13.el9.noarch","release":"13.el9","srpm_name":"basesystem","srpm_nevra":"basesystem-0:11-13.el9.src","summary":"The skeleton package which defines a simple Red Hat Enterprise Linux system","version":"11"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools-wheel","nvra":"python3-setuptools-wheel-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"The setuptools wheel","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"pcre2-syntax","nvra":"pcre2-syntax-10.37-3.el9.1.noarch","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Documentation for PCRE2 regular expressions","version":"10.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ncurses-base","nvra":"ncurses-base-6.2-8.20210508.el9.noarch","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Descriptions of common terminals","version":"6.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc-minimal-langpack","nvra":"glibc-minimal-langpack-2.34-28.el9_0.aarch64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Minimal language packs for glibc.","version":"2.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc-common","nvra":"glibc-common-2.34-28.el9_0.aarch64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"Common binaries and locale data for glibc","version":"2.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glibc","nvra":"glibc-2.34-28.el9_0.aarch64","release":"28.el9_0","srpm_name":"glibc","srpm_nevra":"glibc-0:2.34-28.el9_0.src","summary":"The GNU libc libraries","version":"2.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"ncurses-libs","nvra":"ncurses-libs-6.2-8.20210508.el9.aarch64","release":"8.20210508.el9","srpm_name":"ncurses","srpm_nevra":"ncurses-0:6.2-8.20210508.el9.src","summary":"Ncurses libraries","version":"6.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"bash","nvra":"bash-5.1.8-4.el9.aarch64","release":"4.el9","srpm_name":"bash","srpm_nevra":"bash-0:5.1.8-4.el9.src","summary":"The GNU Bourne Again shell","version":"5.1.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"zlib","nvra":"zlib-1.2.11-31.el9_0.1.aarch64","release":"31.el9_0.1","srpm_name":"zlib","srpm_nevra":"zlib-0:1.2.11-31.el9_0.1.src","summary":"Compression and decompression library","version":"1.2.11"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"xz-libs","nvra":"xz-libs-5.2.5-7.el9.aarch64","release":"7.el9","srpm_name":"xz","srpm_nevra":"xz-0:5.2.5-7.el9.src","summary":"Libraries for decoding LZMA compression","version":"5.2.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"bzip2-libs","nvra":"bzip2-libs-1.0.8-8.el9.aarch64","release":"8.el9","srpm_name":"bzip2","srpm_nevra":"bzip2-0:1.0.8-8.el9.src","summary":"Libraries for applications using bzip2","version":"1.0.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libzstd","nvra":"libzstd-1.5.1-2.el9.aarch64","release":"2.el9","srpm_name":"zstd","srpm_nevra":"zstd-0:1.5.1-2.el9.src","summary":"Zstd shared library","version":"1.5.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libxcrypt","nvra":"libxcrypt-4.4.18-3.el9.aarch64","release":"3.el9","srpm_name":"libxcrypt","srpm_nevra":"libxcrypt-0:4.4.18-3.el9.src","summary":"Extended crypt library for descrypt, md5crypt, bcrypt, and others","version":"4.4.18"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcap","nvra":"libcap-2.48-8.el9.aarch64","release":"8.el9","srpm_name":"libcap","srpm_nevra":"libcap-0:2.48-8.el9.src","summary":"Library for getting and setting POSIX.1e capabilities","version":"2.48"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"sqlite-libs","nvra":"sqlite-libs-3.34.1-5.el9.aarch64","release":"5.el9","srpm_name":"sqlite","srpm_nevra":"sqlite-0:3.34.1-5.el9.src","summary":"Shared library for the sqlite3 embeddable SQL database engine.","version":"3.34.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libuuid","nvra":"libuuid-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Universally unique ID library","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"popt","nvra":"popt-1.18-8.el9.aarch64","release":"8.el9","srpm_name":"popt","srpm_nevra":"popt-0:1.18-8.el9.src","summary":"C library for parsing command line parameters","version":"1.18"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libffi","nvra":"libffi-3.4.2-7.el9.aarch64","release":"7.el9","srpm_name":"libffi","srpm_nevra":"libffi-0:3.4.2-7.el9.src","summary":"A portable foreign function interface library","version":"3.4.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"p11-kit","nvra":"p11-kit-0.24.1-2.el9.aarch64","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"Library for loading and sharing PKCS#11 modules","version":"0.24.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgpg-error","nvra":"libgpg-error-1.42-5.el9.aarch64","release":"5.el9","srpm_name":"libgpg-error","srpm_nevra":"libgpg-error-0:1.42-5.el9.src","summary":"Library for error values used by GnuPG components","version":"1.42"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libxml2","nvra":"libxml2-2.9.13-1.el9.aarch64","release":"1.el9","srpm_name":"libxml2","srpm_nevra":"libxml2-0:2.9.13-1.el9.src","summary":"Library providing XML and HTML support","version":"2.9.13"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"readline","nvra":"readline-8.1-4.el9.aarch64","release":"4.el9","srpm_name":"readline","srpm_nevra":"readline-0:8.1-4.el9.src","summary":"A library for editing typed command lines","version":"8.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gmp","nvra":"gmp-6.2.0-10.el9.aarch64","release":"10.el9","srpm_name":"gmp","srpm_nevra":"gmp-1:6.2.0-10.el9.src","summary":"A GNU arbitrary precision library","version":"6.2.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"json-c","nvra":"json-c-0.14-11.el9.aarch64","release":"11.el9","srpm_name":"json-c","srpm_nevra":"json-c-0:0.14-11.el9.src","summary":"JSON implementation in C","version":"0.14"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsmartcols","nvra":"libsmartcols-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Formatting library for ls-like programs.","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libstdc++","nvra":"libstdc++-11.2.1-9.4.el9.aarch64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GNU Standard C++ Library","version":"11.2.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"lua-libs","nvra":"lua-libs-5.4.2-4.el9.aarch64","release":"4.el9","srpm_name":"lua","srpm_nevra":"lua-0:5.4.2-4.el9.src","summary":"Libraries for lua","version":"5.4.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgcrypt","nvra":"libgcrypt-1.10.0-2.el9.aarch64","release":"2.el9","srpm_name":"libgcrypt","srpm_nevra":"libgcrypt-0:1.10.0-2.el9.src","summary":"A general-purpose cryptography library","version":"1.10.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"elfutils-libelf","nvra":"elfutils-libelf-0.186-1.el9.aarch64","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Library to read and write ELF files","version":"0.186"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"file-libs","nvra":"file-libs-5.39-8.el9.aarch64","release":"8.el9","srpm_name":"file","srpm_nevra":"file-0:5.39-8.el9.src","summary":"Libraries for applications using libmagic","version":"5.39"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"expat","nvra":"expat-2.2.10-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"expat","srpm_nevra":"expat-0:2.2.10-12.el9_0.src","summary":"An XML parser library","version":"2.2.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libattr","nvra":"libattr-2.5.1-3.el9.aarch64","release":"3.el9","srpm_name":"attr","srpm_nevra":"attr-0:2.5.1-3.el9.src","summary":"Dynamic library for extended attribute support","version":"2.5.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libacl","nvra":"libacl-2.3.1-3.el9.aarch64","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Dynamic library for access control list support","version":"2.3.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcap-ng","nvra":"libcap-ng-0.8.2-7.el9.aarch64","release":"7.el9","srpm_name":"libcap-ng","srpm_nevra":"libcap-ng-0:0.8.2-7.el9.src","summary":"Alternate posix capabilities library","version":"0.8.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"audit-libs","nvra":"audit-libs-3.0.7-101.el9_0.2.aarch64","release":"101.el9_0.2","srpm_name":"audit","srpm_nevra":"audit-0:3.0.7-101.el9_0.2.src","summary":"Dynamic library for libaudit","version":"3.0.7"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcom_err","nvra":"libcom_err-1.46.5-2.el9.aarch64","release":"2.el9","srpm_name":"e2fsprogs","srpm_nevra":"e2fsprogs-0:1.46.5-2.el9.src","summary":"Common error description library","version":"1.46.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"lz4-libs","nvra":"lz4-libs-1.9.3-5.el9.aarch64","release":"5.el9","srpm_name":"lz4","srpm_nevra":"lz4-0:1.9.3-5.el9.src","summary":"Libaries for lz4","version":"1.9.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libassuan","nvra":"libassuan-2.5.5-3.el9.aarch64","release":"3.el9","srpm_name":"libassuan","srpm_nevra":"libassuan-0:2.5.5-3.el9.src","summary":"GnuPG IPC library","version":"2.5.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gdbm-libs","nvra":"gdbm-libs-1.19-4.el9.aarch64","release":"4.el9","srpm_name":"gdbm","srpm_nevra":"gdbm-1:1.19-4.el9.src","summary":"Libraries files for gdbm","version":"1.19"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"keyutils-libs","nvra":"keyutils-libs-1.6.1-4.el9.aarch64","release":"4.el9","srpm_name":"keyutils","srpm_nevra":"keyutils-0:1.6.1-4.el9.src","summary":"Key utilities library","version":"1.6.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsepol","nvra":"libsepol-3.3-2.el9.aarch64","release":"2.el9","srpm_name":"libsepol","srpm_nevra":"libsepol-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsigsegv","nvra":"libsigsegv-2.13-4.el9.aarch64","release":"4.el9","srpm_name":"libsigsegv","srpm_nevra":"libsigsegv-0:2.13-4.el9.src","summary":"Library for handling page faults in user mode","version":"2.13"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libtasn1","nvra":"libtasn1-4.16.0-7.el9.aarch64","release":"7.el9","srpm_name":"libtasn1","srpm_nevra":"libtasn1-0:4.16.0-7.el9.src","summary":"The ASN.1 library used in GNUTLS","version":"4.16.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libunistring","nvra":"libunistring-0.9.10-15.el9.aarch64","release":"15.el9","srpm_name":"libunistring","srpm_nevra":"libunistring-0:0.9.10-15.el9.src","summary":"GNU Unicode string library","version":"0.9.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pcre","nvra":"pcre-8.44-3.el9.3.aarch64","release":"3.el9.3","srpm_name":"pcre","srpm_nevra":"pcre-0:8.44-3.el9.3.src","summary":"Perl-compatible regular expression library","version":"8.44"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"grep","nvra":"grep-3.6-5.el9.aarch64","release":"5.el9","srpm_name":"grep","srpm_nevra":"grep-0:3.6-5.el9.src","summary":"Pattern matching utilities","version":"3.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pcre2","nvra":"pcre2-10.37-3.el9.1.aarch64","release":"3.el9.1","srpm_name":"pcre2","srpm_nevra":"pcre2-0:10.37-3.el9.1.src","summary":"Perl-compatible regular expression library","version":"10.37"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libselinux","nvra":"libselinux-3.3-2.el9.aarch64","release":"2.el9","srpm_name":"libselinux","srpm_nevra":"libselinux-0:3.3-2.el9.src","summary":"SELinux library and simple utilities","version":"3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"coreutils-single","nvra":"coreutils-single-8.32-31.el9.aarch64","release":"31.el9","srpm_name":"coreutils","srpm_nevra":"coreutils-0:8.32-31.el9.src","summary":"coreutils multicall binary","version":"8.32"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libblkid","nvra":"libblkid-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Block device ID library","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libmount","nvra":"libmount-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Device mounting library","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"sed","nvra":"sed-4.8-9.el9.aarch64","release":"9.el9","srpm_name":"sed","srpm_nevra":"sed-0:4.8-9.el9.src","summary":"A GNU stream text editor","version":"4.8"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libfdisk","nvra":"libfdisk-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"Partitioning library for fdisk-like programs.","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gzip","nvra":"gzip-1.10-9.el9_0.aarch64","release":"9.el9_0","srpm_name":"gzip","srpm_nevra":"gzip-0:1.10-9.el9_0.src","version":"1.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cracklib","nvra":"cracklib-2.9.6-27.el9.aarch64","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"A password-checking library","version":"2.9.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cracklib-dicts","nvra":"cracklib-dicts-2.9.6-27.el9.aarch64","release":"27.el9","srpm_name":"cracklib","srpm_nevra":"cracklib-0:2.9.6-27.el9.src","summary":"The standard CrackLib dictionaries","version":"2.9.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsemanage","nvra":"libsemanage-3.3-2.el9.aarch64","release":"2.el9","srpm_name":"libsemanage","srpm_nevra":"libsemanage-0:3.3-2.el9.src","summary":"SELinux binary policy manipulation library","version":"3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"shadow-utils","nvra":"shadow-utils-4.9-3.el9.aarch64","release":"3.el9","srpm_name":"shadow-utils","srpm_nevra":"shadow-utils-2:4.9-3.el9.src","summary":"Utilities for managing accounts and shadow password files","version":"4.9"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libutempter","nvra":"libutempter-1.2.1-6.el9.aarch64","release":"6.el9","srpm_name":"libutempter","srpm_nevra":"libutempter-0:1.2.1-6.el9.src","summary":"A privileged helper for utmp/wtmp updates","version":"1.2.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libidn2","nvra":"libidn2-2.3.0-7.el9.aarch64","release":"7.el9","srpm_name":"libidn2","srpm_nevra":"libidn2-0:2.3.0-7.el9.src","summary":"Library to support IDNA2008 internationalized domain names","version":"2.3.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"acl","nvra":"acl-2.3.1-3.el9.aarch64","release":"3.el9","srpm_name":"acl","srpm_nevra":"acl-0:2.3.1-3.el9.src","summary":"Access control list utilities","version":"2.3.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcomps","nvra":"libcomps-0.1.18-1.el9.aarch64","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Comps XML file manipulation library","version":"0.1.18"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"mpfr","nvra":"mpfr-4.1.0-7.el9.aarch64","release":"7.el9","srpm_name":"mpfr","srpm_nevra":"mpfr-0:4.1.0-7.el9.src","summary":"C library for multiple-precision floating-point computations","version":"4.1.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gawk","nvra":"gawk-5.1.0-6.el9.aarch64","release":"6.el9","srpm_name":"gawk","srpm_nevra":"gawk-0:5.1.0-6.el9.src","summary":"The GNU version of the AWK text processing utility","version":"5.1.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"nettle","nvra":"nettle-3.7.3-2.el9.aarch64","release":"2.el9","srpm_name":"nettle","srpm_nevra":"nettle-0:3.7.3-2.el9.src","summary":"A low-level cryptographic library","version":"3.7.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libksba","nvra":"libksba-1.5.1-4.el9.aarch64","release":"4.el9","srpm_name":"libksba","srpm_nevra":"libksba-0:1.5.1-4.el9.src","summary":"CMS and X.509 library","version":"1.5.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"systemd-rpm-macros","nvra":"systemd-rpm-macros-250-6.el9_0.noarch","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"Macros that define paths and scriptlets related to systemd","version":"250"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"alternatives","nvra":"alternatives-1.20-2.el9.aarch64","release":"2.el9","srpm_name":"chkconfig","srpm_nevra":"chkconfig-0:1.20-2.el9.src","summary":"A tool to maintain symbolic links determining default commands","version":"1.20"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"p11-kit-trust","nvra":"p11-kit-trust-0.24.1-2.el9.aarch64","release":"2.el9","srpm_name":"p11-kit","srpm_nevra":"p11-kit-0:0.24.1-2.el9.src","summary":"System trust module from p11-kit","version":"0.24.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"ca-certificates","nvra":"ca-certificates-2020.2.50-94.el9.noarch","release":"94.el9","srpm_name":"ca-certificates","srpm_nevra":"ca-certificates-0:2020.2.50-94.el9.src","summary":"The Mozilla CA root certificate bundle","version":"2020.2.50"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"openssl-libs","nvra":"openssl-libs-3.0.1-23.el9_0.aarch64","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"A general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"systemd-libs","nvra":"systemd-libs-250-6.el9_0.aarch64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd libraries","version":"250"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gnutls","nvra":"gnutls-3.7.3-9.el9.aarch64","release":"9.el9","srpm_name":"gnutls","srpm_nevra":"gnutls-0:3.7.3-9.el9.src","summary":"A TLS protocol implementation","version":"3.7.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"glib2","nvra":"glib2-2.68.4-5.el9.aarch64","release":"5.el9","srpm_name":"glib2","srpm_nevra":"glib2-0:2.68.4-5.el9.src","summary":"A library of handy utility functions","version":"2.68.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gobject-introspection","nvra":"gobject-introspection-1.68.0-10.el9.aarch64","release":"10.el9","srpm_name":"gobject-introspection","srpm_nevra":"gobject-introspection-0:1.68.0-10.el9.src","summary":"Introspection system for GObject-based libraries","version":"1.68.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"json-glib","nvra":"json-glib-1.6.6-1.el9.aarch64","release":"1.el9","srpm_name":"json-glib","srpm_nevra":"json-glib-0:1.6.6-1.el9.src","summary":"Library for JavaScript Object Notation format","version":"1.6.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"librhsm","nvra":"librhsm-0.0.3-7.el9.aarch64","release":"7.el9","srpm_name":"librhsm","srpm_nevra":"librhsm-0:0.0.3-7.el9.src","summary":"Red Hat Subscription Manager library","version":"0.0.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus-libs","nvra":"dbus-libs-1.12.20-5.el9.aarch64","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"Libraries for accessing D-BUS","version":"1.12.20"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"util-linux-core","nvra":"util-linux-core-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"The most essential utilities from the util-linux suite.","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"kmod-libs","nvra":"kmod-libs-28-7.el9.aarch64","release":"7.el9","srpm_name":"kmod","srpm_nevra":"kmod-0:28-7.el9.src","summary":"Libraries to handle kernel module loading and unloading","version":"28"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libarchive","nvra":"libarchive-3.5.3-1.el9.aarch64","release":"1.el9","srpm_name":"libarchive","srpm_nevra":"libarchive-0:3.5.3-1.el9.src","summary":"A library for handling streaming archive formats","version":"3.5.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"openssl","nvra":"openssl-3.0.1-23.el9_0.aarch64","release":"23.el9_0","srpm_name":"openssl","srpm_nevra":"openssl-1:3.0.1-23.el9_0.src","summary":"Utilities from the general purpose cryptography library with TLS implementation","version":"3.0.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pip-wheel","nvra":"python3-pip-wheel-21.2.3-6.el9.noarch","release":"6.el9","srpm_name":"python-pip","srpm_nevra":"python-pip-0:21.2.3-6.el9.src","summary":"The pip wheel","version":"21.2.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3","nvra":"python3-3.9.10-2.el9.aarch64","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python 3.9 interpreter","version":"3.9.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-libs","nvra":"python3-libs-3.9.10-2.el9.aarch64","release":"2.el9","srpm_name":"python3.9","srpm_nevra":"python3.9-0:3.9.10-2.el9.src","summary":"Python runtime libraries","version":"3.9.10"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-dbus","nvra":"python3-dbus-1.2.18-2.el9.aarch64","release":"2.el9","srpm_name":"dbus-python","srpm_nevra":"dbus-python-0:1.2.18-2.el9.src","summary":"D-Bus bindings for python3","version":"1.2.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-six","nvra":"python3-six-1.15.0-9.el9.noarch","release":"9.el9","srpm_name":"python-six","srpm_nevra":"python-six-0:1.15.0-9.el9.src","summary":"Python 2 and 3 compatibility utilities","version":"1.15.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dateutil","nvra":"python3-dateutil-2.8.1-6.el9.noarch","release":"6.el9","srpm_name":"python-dateutil","srpm_nevra":"python-dateutil-1:2.8.1-6.el9.src","summary":"Powerful extensions to the standard datetime module","version":"2.8.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-iniparse","nvra":"python3-iniparse-0.4-45.el9.noarch","release":"45.el9","srpm_name":"python-iniparse","srpm_nevra":"python-iniparse-0:0.4-45.el9.src","summary":"Python Module for Accessing and Modifying Configuration Data in INI files","version":"0.4"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-idna","nvra":"python3-idna-2.10-7.el9.noarch","release":"7.el9","srpm_name":"python-idna","srpm_nevra":"python-idna-0:2.10-7.el9.src","summary":"Internationalized Domain Names in Applications (IDNA)","version":"2.10"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-setuptools","nvra":"python3-setuptools-53.0.0-10.el9.noarch","release":"10.el9","srpm_name":"python-setuptools","srpm_nevra":"python-setuptools-0:53.0.0-10.el9.src","summary":"Easily build and distribute Python 3 packages","version":"53.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-inotify","nvra":"python3-inotify-0.9.6-25.el9.noarch","release":"25.el9","srpm_name":"python-inotify","srpm_nevra":"python-inotify-0:0.9.6-25.el9.src","summary":"Monitor filesystem events with Python under Linux","version":"0.9.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-libcomps","nvra":"python3-libcomps-0.1.18-1.el9.aarch64","release":"1.el9","srpm_name":"libcomps","srpm_nevra":"libcomps-0:0.1.18-1.el9.src","summary":"Python 3 bindings for libcomps library","version":"0.1.18"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-chardet","nvra":"python3-chardet-4.0.0-5.el9.noarch","release":"5.el9","srpm_name":"python-chardet","srpm_nevra":"python-chardet-0:4.0.0-5.el9.src","summary":"Character encoding auto-detection in Python","version":"4.0.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-decorator","nvra":"python3-decorator-4.4.2-6.el9.noarch","release":"6.el9","srpm_name":"python-decorator","srpm_nevra":"python-decorator-0:4.4.2-6.el9.src","summary":"Module to simplify usage of decorators in python3","version":"4.4.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-gobject-base","nvra":"python3-gobject-base-3.40.1-5.el9.aarch64","release":"5.el9","srpm_name":"pygobject3","srpm_nevra":"pygobject3-0:3.40.1-5.el9.src","summary":"Python 3 bindings for GObject Introspection base package","version":"3.40.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-pysocks","nvra":"python3-pysocks-1.7.1-12.el9.noarch","release":"12.el9","srpm_name":"python-pysocks","srpm_nevra":"python-pysocks-0:1.7.1-12.el9.src","summary":"A Python SOCKS client module","version":"1.7.1"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-urllib3","nvra":"python3-urllib3-1.26.5-3.el9.noarch","release":"3.el9","srpm_name":"python-urllib3","srpm_nevra":"python-urllib3-0:1.26.5-3.el9.src","summary":"Python3 HTTP library with thread-safe connection pooling and file post","version":"1.26.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-requests","nvra":"python3-requests-2.25.1-6.el9.noarch","release":"6.el9","srpm_name":"python-requests","srpm_nevra":"python-requests-0:2.25.1-6.el9.src","summary":"HTTP library, written in Python, for human beings","version":"2.25.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-cloud-what","nvra":"python3-cloud-what-1.29.26-3.el9_0.aarch64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Python package for detection of public cloud provider","version":"1.29.26"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dmidecode","nvra":"dmidecode-3.3-7.el9.aarch64","release":"7.el9","srpm_name":"dmidecode","srpm_nevra":"dmidecode-1:3.3-7.el9.src","summary":"Tool to analyse BIOS DMI data","version":"3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libdb","nvra":"libdb-5.3.28-53.el9.aarch64","release":"53.el9","srpm_name":"libdb","srpm_nevra":"libdb-0:5.3.28-53.el9.src","summary":"The Berkeley DB database library for C","version":"5.3.28"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libeconf","nvra":"libeconf-0.4.1-2.el9.aarch64","release":"2.el9","srpm_name":"libeconf","srpm_nevra":"libeconf-0:0.4.1-2.el9.src","summary":"Enhanced config file parser library","version":"0.4.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libpwquality","nvra":"libpwquality-1.4.4-8.el9.aarch64","release":"8.el9","srpm_name":"libpwquality","srpm_nevra":"libpwquality-0:1.4.4-8.el9.src","summary":"A library for password generation and password quality checking","version":"1.4.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"pam","nvra":"pam-1.5.1-9.el9.aarch64","release":"9.el9","srpm_name":"pam","srpm_nevra":"pam-0:1.5.1-9.el9.src","summary":"An extensible library which provides authentication for applications","version":"1.5.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"util-linux","nvra":"util-linux-2.37.4-3.el9.aarch64","release":"3.el9","srpm_name":"util-linux","srpm_nevra":"util-linux-0:2.37.4-3.el9.src","summary":"A collection of basic system utilities","version":"2.37.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libgomp","nvra":"libgomp-11.2.1-9.4.el9.aarch64","release":"9.4.el9","srpm_name":"gcc","srpm_nevra":"gcc-0:11.2.1-9.4.el9.src","summary":"GCC OpenMP v4.5 shared support library","version":"11.2.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libnghttp2","nvra":"libnghttp2-1.43.0-5.el9.aarch64","release":"5.el9","srpm_name":"nghttp2","srpm_nevra":"nghttp2-0:1.43.0-5.el9.src","summary":"A library implementing the HTTP/2 protocol","version":"1.43.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libnl3","nvra":"libnl3-3.5.0-10.el9.aarch64","release":"10.el9","srpm_name":"libnl3","srpm_nevra":"libnl3-0:3.5.0-10.el9.src","summary":"Convenience library for kernel netlink sockets","version":"3.5.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-ethtool","nvra":"python3-ethtool-0.15-2.el9.aarch64","release":"2.el9","srpm_name":"python-ethtool","srpm_nevra":"python-ethtool-0:0.15-2.el9.src","summary":"Python module to interface with ethtool","version":"0.15"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libseccomp","nvra":"libseccomp-2.5.2-2.el9.aarch64","release":"2.el9","srpm_name":"libseccomp","srpm_nevra":"libseccomp-0:2.5.2-2.el9.src","summary":"Enhanced seccomp library","version":"2.5.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"device-mapper","nvra":"device-mapper-1.02.183-4.el9.aarch64","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device mapper utility","version":"1.02.183"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"device-mapper-libs","nvra":"device-mapper-libs-1.02.183-4.el9.aarch64","release":"4.el9","srpm_name":"lvm2","srpm_nevra":"lvm2-9:2.03.14-4.el9.src","summary":"Device-mapper shared library","version":"1.02.183"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cryptsetup-libs","nvra":"cryptsetup-libs-2.4.3-4.el9.aarch64","release":"4.el9","srpm_name":"cryptsetup","srpm_nevra":"cryptsetup-0:2.4.3-4.el9.src","summary":"Cryptsetup shared library","version":"2.4.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus","nvra":"dbus-1.12.20-5.el9.aarch64","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus","version":"1.12.20"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"systemd-pam","nvra":"systemd-pam-250-6.el9_0.aarch64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"systemd PAM module","version":"250"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"systemd","nvra":"systemd-250-6.el9_0.aarch64","release":"6.el9_0","srpm_name":"systemd","srpm_nevra":"systemd-0:250-6.el9_0.src","summary":"System and Service Manager","version":"250"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dbus-common","nvra":"dbus-common-1.12.20-5.el9.noarch","release":"5.el9","srpm_name":"dbus","srpm_nevra":"dbus-1:1.12.20-5.el9.src","summary":"D-BUS message bus configuration","version":"1.12.20"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"dbus-broker","nvra":"dbus-broker-28-5.el9.aarch64","release":"5.el9","srpm_name":"dbus-broker","srpm_nevra":"dbus-broker-0:28-5.el9.src","summary":"Linux D-Bus Message Broker","version":"28"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"elfutils-default-yama-scope","nvra":"elfutils-default-yama-scope-0.186-1.el9.noarch","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Default yama attach scope sysctl setting","version":"0.186"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"elfutils-libs","nvra":"elfutils-libs-0.186-1.el9.aarch64","release":"1.el9","srpm_name":"elfutils","srpm_nevra":"elfutils-0:0.186-1.el9.src","summary":"Libraries to handle compiled objects","version":"0.186"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libverto","nvra":"libverto-0.3.2-3.el9.aarch64","release":"3.el9","srpm_name":"libverto","srpm_nevra":"libverto-0:0.3.2-3.el9.src","summary":"Main loop abstraction library","version":"0.3.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"krb5-libs","nvra":"krb5-libs-1.19.1-15.el9_0.aarch64","release":"15.el9_0","srpm_name":"krb5","srpm_nevra":"krb5-0:1.19.1-15.el9_0.src","summary":"The non-admin shared libraries used by Kerberos 5","version":"1.19.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libcurl-minimal","nvra":"libcurl-minimal-7.76.1-14.el9.aarch64","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of libcurl for minimal installations","version":"7.76.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"curl-minimal","nvra":"curl-minimal-7.76.1-14.el9.aarch64","release":"14.el9","srpm_name":"curl","srpm_nevra":"curl-0:7.76.1-14.el9.src","summary":"Conservatively configured build of curl for minimal installations","version":"7.76.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm","nvra":"rpm-4.16.1.3-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"The RPM package management system","version":"4.16.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm-libs","nvra":"rpm-libs-4.16.1.3-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for manipulating RPM packages","version":"4.16.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libsolv","nvra":"libsolv-0.7.20-2.el9.aarch64","release":"2.el9","srpm_name":"libsolv","srpm_nevra":"libsolv-0:0.7.20-2.el9.src","summary":"Package dependency solver","version":"0.7.20"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm-build-libs","nvra":"rpm-build-libs-4.16.1.3-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for building RPM packages","version":"4.16.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"tpm2-tss","nvra":"tpm2-tss-3.0.3-7.el9.aarch64","release":"7.el9","srpm_name":"tpm2-tss","srpm_nevra":"tpm2-tss-0:3.0.3-7.el9.src","summary":"TPM2.0 Software Stack","version":"3.0.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"ima-evm-utils","nvra":"ima-evm-utils-1.4-4.el9.aarch64","release":"4.el9","srpm_name":"ima-evm-utils","srpm_nevra":"ima-evm-utils-0:1.4-4.el9.src","summary":"IMA/EVM support utilities","version":"1.4"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"cyrus-sasl-lib","nvra":"cyrus-sasl-lib-2.1.27-20.el9.aarch64","release":"20.el9","srpm_name":"cyrus-sasl","srpm_nevra":"cyrus-sasl-0:2.1.27-20.el9.src","summary":"Shared libraries needed by applications which use Cyrus SASL","version":"2.1.27"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"openldap","nvra":"openldap-2.4.59-4.el9_0.aarch64","release":"4.el9_0","srpm_name":"openldap","srpm_nevra":"openldap-0:2.4.59-4.el9_0.src","summary":"LDAP support libraries","version":"2.4.59"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libuser","nvra":"libuser-0.63-10.el9.aarch64","release":"10.el9","srpm_name":"libuser","srpm_nevra":"libuser-0:0.63-10.el9.src","summary":"A user and group account administration library","version":"0.63"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"passwd","nvra":"passwd-0.80-12.el9.aarch64","release":"12.el9","srpm_name":"passwd","srpm_nevra":"passwd-0:0.80-12.el9.src","summary":"An utility for setting or changing passwords using PAM","version":"0.80"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"usermode","nvra":"usermode-1.114-4.el9.aarch64","release":"4.el9","srpm_name":"usermode","srpm_nevra":"usermode-0:1.114-4.el9.src","summary":"Tools for certain user account management tasks","version":"1.114"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libyaml","nvra":"libyaml-0.2.5-7.el9.aarch64","release":"7.el9","srpm_name":"libyaml","srpm_nevra":"libyaml-0:0.2.5-7.el9.src","summary":"YAML 1.1 parser and emitter written in C","version":"0.2.5"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libmodulemd","nvra":"libmodulemd-2.13.0-2.el9.aarch64","release":"2.el9","srpm_name":"libmodulemd","srpm_nevra":"libmodulemd-0:2.13.0-2.el9.src","summary":"Module metadata manipulation library","version":"2.13.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"npth","nvra":"npth-1.6-8.el9.aarch64","release":"8.el9","srpm_name":"npth","srpm_nevra":"npth-0:1.6-8.el9.src","summary":"The New GNU Portable Threads library","version":"1.6"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gnupg2","nvra":"gnupg2-2.3.3-1.el9.aarch64","release":"1.el9","srpm_name":"gnupg2","srpm_nevra":"gnupg2-0:2.3.3-1.el9.src","summary":"Utility for secure communication and data storage","version":"2.3.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gpgme","nvra":"gpgme-1.15.1-6.el9.aarch64","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"GnuPG Made Easy - high level crypto API","version":"1.15.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"librepo","nvra":"librepo-1.14.2-1.el9.aarch64","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Repodata downloading library","version":"1.14.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libdnf","nvra":"libdnf-0.65.0-5.el9_0.aarch64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Library providing simplified C and Python API to libsolv","version":"0.65.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-libdnf","nvra":"python3-libdnf-0.65.0-5.el9_0.aarch64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the libdnf library.","version":"0.65.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-hawkey","nvra":"python3-hawkey-0.65.0-5.el9_0.aarch64","release":"5.el9_0","srpm_name":"libdnf","srpm_nevra":"libdnf-0:0.65.0-5.el9_0.src","summary":"Python 3 bindings for the hawkey library","version":"0.65.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-librepo","nvra":"python3-librepo-1.14.2-1.el9.aarch64","release":"1.el9","srpm_name":"librepo","srpm_nevra":"librepo-0:1.14.2-1.el9.src","summary":"Python 3 bindings for the librepo library","version":"1.14.2"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-gpg","nvra":"python3-gpg-1.15.1-6.el9.aarch64","release":"6.el9","srpm_name":"gpgme","srpm_nevra":"gpgme-0:1.15.1-6.el9.src","summary":"gpgme bindings for Python 3","version":"1.15.1"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"rpm-sign-libs","nvra":"rpm-sign-libs-4.16.1.3-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Libraries for signing RPM packages","version":"4.16.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-rpm","nvra":"python3-rpm-4.16.1.3-12.el9_0.aarch64","release":"12.el9_0","srpm_name":"rpm","srpm_nevra":"rpm-0:4.16.1.3-12.el9_0.src","summary":"Python 3 bindings for apps which will manipulate RPM packages","version":"4.16.1.3"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"python3-subscription-manager-rhsm","nvra":"python3-subscription-manager-rhsm-1.29.26-3.el9_0.aarch64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"A Python library to communicate with a Red Hat Unified Entitlement Platform","version":"1.29.26"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"which","nvra":"which-2.21-27.el9.aarch64","release":"27.el9","srpm_name":"which","srpm_nevra":"which-0:2.21-27.el9.src","summary":"Displays where a particular program in your path is located","version":"2.21"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"virt-what","nvra":"virt-what-1.21-2.el9.2.aarch64","release":"2.el9.2","srpm_name":"virt-what","srpm_nevra":"virt-what-0:1.21-2.el9.2.src","summary":"Detect if we are running in a virtual machine","version":"1.21"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"libreport-filesystem","nvra":"libreport-filesystem-2.15.2-6.el9.noarch","release":"6.el9","srpm_name":"libreport","srpm_nevra":"libreport-0:2.15.2-6.el9.src","summary":"Filesystem layout for libreport","version":"2.15.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf-data","nvra":"dnf-data-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Common data and configuration files for DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf","nvra":"python3-dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Python 3 interface to DNF","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dnf","nvra":"dnf-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"libdnf-plugin-subscription-manager","nvra":"libdnf-plugin-subscription-manager-1.29.26-3.el9_0.aarch64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Subscription Manager plugin for libdnf","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"python3-dnf-plugins-core","nvra":"python3-dnf-plugins-core-4.0.24-4.el9_0.noarch","release":"4.el9_0","srpm_name":"dnf-plugins-core","srpm_nevra":"dnf-plugins-core-0:4.0.24-4.el9_0.src","summary":"Core Plugins for DNF","version":"4.0.24"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"fonts-filesystem","nvra":"fonts-filesystem-2.0.5-7.el9.1.noarch","release":"7.el9.1","srpm_name":"fonts-rpm-macros","srpm_nevra":"fonts-rpm-macros-1:2.0.5-7.el9.1.src","summary":"Directories used by font packages","version":"2.0.5"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"dejavu-sans-fonts","nvra":"dejavu-sans-fonts-2.37-18.el9.noarch","release":"18.el9","srpm_name":"dejavu-fonts","srpm_nevra":"dejavu-fonts-0:2.37-18.el9.src","summary":"DejaVu Sans, a variable-width sans-serif font family","version":"2.37"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-font-en","nvra":"langpacks-core-font-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English core font meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-core-en","nvra":"langpacks-core-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks core meta-package","version":"3.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"langpacks-en","nvra":"langpacks-en-3.0-16.el9.noarch","release":"16.el9","srpm_name":"langpacks","srpm_nevra":"langpacks-0:3.0-16.el9.src","summary":"English langpacks meta-package","version":"3.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"subscription-manager","nvra":"subscription-manager-1.29.26-3.el9_0.aarch64","release":"3.el9_0","srpm_name":"subscription-manager","srpm_nevra":"subscription-manager-0:1.29.26-3.el9_0.src","summary":"Tools and libraries for subscription and repository management","version":"1.29.26"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"yum","nvra":"yum-4.10.0-5.el9_0.noarch","release":"5.el9_0","srpm_name":"dnf","srpm_nevra":"dnf-0:4.10.0-5.el9_0.src","summary":"Package manager","version":"4.10.0"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"crypto-policies-scripts","nvra":"crypto-policies-scripts-20220223-1.git5203b41.el9_0.1.noarch","release":"1.git5203b41.el9_0.1","srpm_name":"crypto-policies","srpm_nevra":"crypto-policies-0:20220223-1.git5203b41.el9_0.1.src","summary":"Tool to switch between crypto policies","version":"20220223"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"findutils","nvra":"findutils-4.8.0-5.el9.aarch64","release":"5.el9","srpm_name":"findutils","srpm_nevra":"findutils-1:4.8.0-5.el9.src","summary":"The GNU versions of find utilities (find and xargs)","version":"4.8.0"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"tar","nvra":"tar-1.34-3.el9.aarch64","release":"3.el9","srpm_name":"tar","srpm_nevra":"tar-2:1.34-3.el9.src","summary":"GNU file archiving program","version":"1.34"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"vim-minimal","nvra":"vim-minimal-8.2.2637-15.el9.aarch64","release":"15.el9","srpm_name":"vim","srpm_nevra":"vim-2:8.2.2637-15.el9.src","summary":"A minimal version of the VIM editor","version":"8.2.2637"},{"architecture":"aarch64","gpg":"199e2f91fd431d51","name":"gdb-gdbserver","nvra":"gdb-gdbserver-10.2-9.el9.aarch64","release":"9.el9","srpm_name":"gdb","srpm_nevra":"gdb-0:10.2-9.el9.src","summary":"A standalone server for GDB (the GNU source-level debugger)","version":"10.2"},{"architecture":"noarch","gpg":"199e2f91fd431d51","name":"rootfiles","nvra":"rootfiles-8.1-31.el9.noarch","release":"31.el9","srpm_name":"rootfiles","srpm_nevra":"rootfiles-0:8.1-31.el9.src","summary":"The basic required files for the root user's directory","version":"8.1"}],"_links":{"image":{"href":"/v1/images/id/6270e10180cc9b3025076e97"}}} From 3aa9071b9408643ac1055c121bb6eef202e4477f Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Thu, 15 May 2025 12:54:37 -0500 Subject: [PATCH 17/31] rpmtest: handle repoids in comparisons Signed-off-by: Hank Donnay --- test/rpmtest/options.go | 59 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/test/rpmtest/options.go b/test/rpmtest/options.go index 3bf2776ca..3914cddf9 100644 --- a/test/rpmtest/options.go +++ b/test/rpmtest/options.go @@ -3,6 +3,7 @@ package rpmtest import ( "net/url" "reflect" + "slices" "sync" "testing" @@ -16,11 +17,11 @@ import ( // Options is a standard set of [cmp.Options] for working with packages from // rpm. The passed [testing.TB] is captured, so the returned Options cannot be // reused across tests. -func Options(t testing.TB) cmp.Options { +func Options(t testing.TB, repos []string) cmp.Options { return cmp.Options{ - HintCompare(t), + HintCompare(t, repos), VersionTransform(t), - IgnorePackageDB, + IgnoreFields, SortPackages, ModuleCompare, } @@ -30,7 +31,14 @@ func Options(t testing.TB) cmp.Options { // // The RPM manifest doesn't have checksum information. It does have keyid // information, so normalize down to the common set. -func HintCompare(t testing.TB) cmp.Option { +func HintCompare(t testing.TB, repos []string) cmp.Option { + const ( + keyHash = `hash` + keyRepo = `repoid` + ) + if repos != nil { + slices.Sort(repos) + } return cmp.FilterPath( func(p cmp.Path) bool { return p.Last().String() == ".RepositoryHint" }, cmp.Comparer(func(a, b string) bool { @@ -42,13 +50,50 @@ func HintCompare(t testing.TB) cmp.Option { if err != nil { t.Errorf("%q: %v", b, err) } - av.Del("hash") - bv.Del("hash") + + // Ignore "hash" keys. + av.Del(keyHash) + bv.Del(keyHash) + + ar, aok := av[keyRepo] + br, bok := bv[keyRepo] + switch { + case aok == bok: // Let the normal compare work. + case aok && !bok: + // If only the "a" values have repo values, make sure it's a + // subset of the allowed values. + if isSubset(repos, ar) { + av.Del(keyRepo) + } + case !aok && bok: + // Ditto for the "b" values. + if isSubset(repos, br) { + bv.Del(keyRepo) + } + } + return cmp.Equal(av.Encode(), bv.Encode()) }), ) } +// IsSubset reports if "sub" is a subset or equal to "super". +// +// It's assumed the slices are "set-like," meaning they do not contain +// duplicated elements, although this is not checked. +func isSubset[S ~[]E, E comparable](super, sub S) bool { + if super == nil || len(super) < len(sub) { + return false + } + n := 0 + for _, e := range sub { + if slices.Contains(super, e) { + n++ + } + } + return n == len(sub) +} + // VersionTransform turns a [Package.Version] into [rpmver.Version]. Go-cmp // produces sensible output on [rpmver.Version] objects. func VersionTransform(t testing.TB) cmp.Option { @@ -95,5 +140,5 @@ var ( SortPackages = cmpopts.SortSlices(func(a, b *claircore.Package) bool { return a.Name < b.Name }) - IgnorePackageDB = cmpopts.IgnoreFields(claircore.Package{}, ".PackageDB") + IgnoreFields = cmpopts.IgnoreFields(claircore.Package{}, ".PackageDB") ) From 68203bd753c18f1e704b073c60df08033773ce11 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Thu, 15 May 2025 12:55:09 -0500 Subject: [PATCH 18/31] rpmtest: add archive-based test helper Signed-off-by: Hank Donnay --- test/rpmtest/archive.go | 104 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/test/rpmtest/archive.go b/test/rpmtest/archive.go index b54cfdab7..85b442e9f 100644 --- a/test/rpmtest/archive.go +++ b/test/rpmtest/archive.go @@ -13,9 +13,15 @@ import ( "path" "slices" "strings" + "testing" + "github.com/google/go-cmp/cmp" + "github.com/quay/zlog" "golang.org/x/tools/txtar" + "github.com/quay/claircore" + "github.com/quay/claircore/internal/wart" + "github.com/quay/claircore/test" "github.com/quay/claircore/test/redhat/catalog" "github.com/quay/claircore/test/redhat/hydra" ) @@ -169,3 +175,101 @@ func (a *Archive) Repository() (catalog.Repository, error) { } return r, errors.New("no repository object") } + +// Tests runs "tf" on images described in the archive and checks the output with +// the relevant rpm manifest in the archive. +func (a *Archive) Tests( + ctx context.Context, + ca *test.CachedArena, + repoAllow map[string][]string, + tf func(context.Context, *claircore.Layer) ([]*claircore.Package, error), +) func(*testing.T) { + if repoAllow == nil { + repoAllow = make(map[string][]string) + } + return func(t *testing.T) { + for _, ref := range a.Repositories() { + t.Run(ref, func(t *testing.T) { + t.Parallel() + + arches := map[string]struct{}{} + reg, repo, _ := strings.Cut(ref, "/") + imgs, err := a.Image(reg, repo) + if err != nil { + t.Fatal(err) + } + + for _, img := range imgs.Data { + // Only consider the first listed instance of an + // architecture, since that's the only rpm manifest that + // will be populated. + if _, skip := arches[img.Archtecture]; skip { + continue + } + arches[img.Archtecture] = struct{}{} + + t.Run(img.Archtecture, func(t *testing.T) { + ctx := zlog.Test(ctx, t) + m, err := a.Manifest(img.ID) + if err != nil { + t.Fatal(err) + } + + repos := repoAllow[ref] + for _, r := range img.ParsedData.Repos { + repos = append(repos, r.ID) + } + t.Logf("allowlisting rpm repositories: %#v", repos) + + var got []*claircore.Package + // Find the top-most layer that returns results. + for i, digest := range img.ParsedData.Layers { + layerRef := test.LayerRef{ + Registry: reg, + Name: repo, + Digest: digest, + } + + // Fetch the layer via the test caching machinery. + ca.LoadLayerFromRegistry(ctx, t, layerRef) + r := ca.Realizer(ctx).(*test.CachedRealizer) + t.Cleanup(func() { + if err := r.Close(); err != nil { + t.Error(err) + } + }) + ls, err := r.RealizeDescriptions(ctx, []claircore.LayerDescription{ + { + Digest: digest, + URI: "http://example.com", + MediaType: test.MediaType, + Headers: make(map[string][]string), + }, + }) + if err != nil { + t.Fatal(err) + } + + got, err = tf(ctx, &ls[0]) + if err != nil { + t.Error(err) + } + if len(got) != 0 { + break + } + t.Logf("skipped layer %d (%s): no packages", i+1, digest) + } + + seq := PackagesFromManifest(t, slices.Values(m.RPMs)) + want := wart.CollectPointer(seq) + + opts := Options(t, repos) + if !cmp.Equal(got, want, opts) { + t.Error(cmp.Diff(got, want, opts)) + } + }) + } + }) + } + } +} From 8bfef9fdd48517b8fb12ae955b5ef0b99fc7963b Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Fri, 16 May 2025 13:57:24 -0500 Subject: [PATCH 19/31] rpm: delegate path checking to internal package Signed-off-by: Hank Donnay --- gobin/gobin.go | 4 +- java/packagescanner.go | 4 +- nodejs/packagescanner.go | 4 +- python/packagescanner.go | 4 +- rpm/files.go | 153 ++------------------------------------- rpm/files_test.go | 108 --------------------------- ruby/packagescanner.go | 4 +- 7 files changed, 16 insertions(+), 265 deletions(-) delete mode 100644 rpm/files_test.go diff --git a/gobin/gobin.go b/gobin/gobin.go index 47459e46e..91aad4456 100644 --- a/gobin/gobin.go +++ b/gobin/gobin.go @@ -84,7 +84,7 @@ func (Detector) Scan(ctx context.Context, l *claircore.Layer) ([]*claircore.Pack // // Only create a single spool file per call, re-use for every binary. var spool spoolfile - fc, err := rpm.NewFileChecker(ctx, l) + set, err := rpm.NewPathSet(ctx, l) if err != nil { return nil, fmt.Errorf("gobin: unable to check RPM db: %w", err) } @@ -113,7 +113,7 @@ func (Detector) Scan(ctx context.Context, l *claircore.Layer) ([]*claircore.Pack return nil } - if fc.IsRPM(p) { + if set.Contains(p) { zlog.Debug(ctx). Str("path", p). Msg("file path determined to be of RPM origin") diff --git a/java/packagescanner.go b/java/packagescanner.go index bed117270..457cc1cbd 100644 --- a/java/packagescanner.go +++ b/java/packagescanner.go @@ -149,13 +149,13 @@ func (s *Scanner) Scan(ctx context.Context, layer *claircore.Layer) ([]*claircor ck := make([]byte, sha1.Size) doSearch := s.root != nil defer putBuf(buf) - fc, err := rpm.NewFileChecker(ctx, layer) + set, err := rpm.NewPathSet(ctx, layer) if err != nil { return nil, fmt.Errorf("java: unable to check RPM db: %w", err) } for _, n := range ars { ctx := zlog.ContextWithValues(ctx, "file", n) - if fc.IsRPM(n) { + if set.Contains(n) { zlog.Debug(ctx). Str("path", n). Msg("file path determined to be of RPM origin") diff --git a/nodejs/packagescanner.go b/nodejs/packagescanner.go index 68b39817a..9c56be593 100644 --- a/nodejs/packagescanner.go +++ b/nodejs/packagescanner.go @@ -92,13 +92,13 @@ func (s *Scanner) Scan(ctx context.Context, layer *claircore.Layer) ([]*claircor ret := make([]*claircore.Package, 0, len(pkgs)) var invalidPkgs []string - fc, err := rpm.NewFileChecker(ctx, layer) + set, err := rpm.NewPathSet(ctx, layer) if err != nil { return nil, fmt.Errorf("nodejs: unable to check RPM db: %w", err) } for _, p := range pkgs { - if fc.IsRPM(p) { + if set.Contains(p) { zlog.Debug(ctx). Str("path", p). Msg("file path determined to be of RPM origin") diff --git a/python/packagescanner.go b/python/packagescanner.go index b13269a58..6f6eb8d96 100644 --- a/python/packagescanner.go +++ b/python/packagescanner.go @@ -79,12 +79,12 @@ func (ps *Scanner) Scan(ctx context.Context, layer *claircore.Layer) ([]*clairco return nil, fmt.Errorf("python: failed to find delicious egg: %w", err) } var ret []*claircore.Package - fc, err := rpm.NewFileChecker(ctx, layer) + set, err := rpm.NewPathSet(ctx, layer) if err != nil { return nil, fmt.Errorf("python: unable to check RPM db: %w", err) } for _, n := range ms { - if fc.IsRPM(n) { + if set.Contains(n) { zlog.Debug(ctx). Str("path", n). Msg("file path determined to be of RPM origin") diff --git a/rpm/files.go b/rpm/files.go index 799de9d08..6e4efaa62 100644 --- a/rpm/files.go +++ b/rpm/files.go @@ -2,156 +2,15 @@ package rpm import ( "context" - "errors" - "fmt" - "io/fs" - "sync" - - "github.com/quay/zlog" - "golang.org/x/sync/singleflight" "github.com/quay/claircore" + "github.com/quay/claircore/internal/rpm" ) -// FilesCache is used for concurrent access to the map containing -// [claircore.Layer] -> map[string]struct{}. -type filesCache struct { - c map[string]map[string]struct{} - refs map[string]int - mu sync.Mutex - sf singleflight.Group - // wg tracks the gc calls made during get. This is particularly useful - // during testing, so we can wait on all the gc calls before asserting - // the cache is indeed empty and all the references were accounted for. - wg sync.WaitGroup -} - -var fc = &filesCache{ - c: map[string]map[string]struct{}{}, - refs: map[string]int{}, -} - -// GC decrements the reference counter and deletes the [claircore.Layer]'s -// entry from the cache map and the reference counter once the references -// are 0 (or less). -func (fc *filesCache) gc(key string) { - fc.mu.Lock() - defer fc.mu.Unlock() - fc.refs[key]-- - if fc.refs[key] <= 0 { - delete(fc.c, key) - delete(fc.refs, key) - fc.sf.Forget(key) - } -} - -// Get increments the reference counter for the key and looks up the key -// in the cache. It will subsequently start a goroutine to track when the -// calling context is done, calling the gc method. -func (fc *filesCache) get(ctx context.Context, key string) (map[string]struct{}, bool) { - fc.mu.Lock() - defer fc.mu.Unlock() - fc.refs[key]++ - f, ok := fc.c[key] - fc.wg.Add(1) - go func() { - defer fc.wg.Done() - <-ctx.Done() - fc.gc(key) - }() - return f, ok -} - -// Set sets the files for a particular key and deals with the locking. -func (fc *filesCache) set(key string, files map[string]struct{}) { - fc.mu.Lock() - defer fc.mu.Unlock() - fc.c[key] = files -} - -var errNoDBFound = errors.New("no RPM DB found") - -// GetFiles looks up RPM files that exist in the RPM database using the -// filesFromDB function and memoizes the result to avoid repeated work -// for the same [claircore.Layer]. -func (fc *filesCache) getFiles(ctx context.Context, layer *claircore.Layer) (map[string]struct{}, error) { - key := layer.Hash.String() - if files, ok := fc.get(ctx, key); ok { - return files, nil - } - - files := map[string]struct{}{} - ch := fc.sf.DoChan(key, func() (interface{}, error) { - sys, err := layer.FS() - if err != nil { - return nil, fmt.Errorf("rpm: unable to open layer: %w", err) - } - - found := make([]foundDB, 0) - if err := fs.WalkDir(sys, ".", findDBs(ctx, &found, sys)); err != nil { - return nil, fmt.Errorf("rpm: error walking fs: %w", err) - } - if len(found) == 0 { - return nil, errNoDBFound - } - - done := map[string]struct{}{} - zlog.Debug(ctx).Int("count", len(found)).Msg("found possible databases") - for _, db := range found { - ctx := zlog.ContextWithValues(ctx, "db", db.String()) - zlog.Debug(ctx).Msg("examining database") - if _, ok := done[db.Path]; ok { - zlog.Debug(ctx).Msg("already seen, skipping") - continue - } - done[db.Path] = struct{}{} - fs, err := getDBObjects(ctx, sys, db, filesFromDB) - if err != nil { - return nil, fmt.Errorf("rpm: error getting native DBs: %w", err) - } - for _, f := range fs { - files[f.Path] = struct{}{} - } - } - fc.set(key, files) - return files, nil - }) - select { - case <-ctx.Done(): - return nil, context.Cause(ctx) - case res := <-ch: - switch { - case res.Err == nil: - files = res.Val.(map[string]struct{}) - case errors.Is(res.Err, errNoDBFound): - default: - return nil, res.Err - } - } - - return files, nil -} - -// NewFileChecker creates a new FileChecker using the file cache to memoize lookups -// of the set of paths that are RPM files. -func NewFileChecker(ctx context.Context, layer *claircore.Layer) (*FileChecker, error) { - fs, err := fc.getFiles(ctx, layer) - if err != nil { - return nil, err - } - return &FileChecker{ - files: fs, - }, nil -} - -// FileChecker is used to check if a path is an RPM file. -type FileChecker struct { - files map[string]struct{} -} +// PathSet is a set of paths "owned" by rpm packages in a given layer. +type PathSet = rpm.PathSet -// IsRPM returns true if the given path exists in the set of paths that are -// considered to be RPM files in the layer this FileChecker was created for. -func (fc *FileChecker) IsRPM(path string) bool { - _, exists := fc.files[path] - return exists +// NewPathSet returns a [PathSet] for the provided layer. +func NewPathSet(ctx context.Context, layer *claircore.Layer) (*PathSet, error) { + return rpm.NewPathSet(ctx, layer) } diff --git a/rpm/files_test.go b/rpm/files_test.go deleted file mode 100644 index 65cca9f96..000000000 --- a/rpm/files_test.go +++ /dev/null @@ -1,108 +0,0 @@ -package rpm - -import ( - "context" - "fmt" - "testing" - - "github.com/quay/zlog" - - "github.com/quay/claircore" - "github.com/quay/claircore/test" -) - -var ( - cache = map[string]map[string]struct{}{} - refs = map[string]int{} - - testFileCache = &filesCache{ - c: cache, - refs: refs, - } -) - -var rpmFilesTestcases = []struct { - name string - isRPM bool - filePath string -}{ - { - name: "Found Node", - isRPM: true, - filePath: "usr/lib/node_modules/npm/node_modules/safe-buffer/package.json", - }, - { - name: "Found Python", - isRPM: true, - filePath: "usr/lib64/python3.9/site-packages/libcomps-0.1.18-py3.9.egg-info/PKG-INFO", - }, - { - name: "Not found", - isRPM: false, - filePath: "usr/lib/node_modules/npm/node_modules/safe-buffer/package.jsonx", - }, -} - -func TestIsRPMFile(t *testing.T) { - ctx := zlog.Test(context.Background(), t) - a := test.NewCachedArena(t) - fc = testFileCache - layer := test.LayerRef{ - Registry: "registry.access.redhat.com", - Name: "ubi9/nodejs-18", - Digest: `sha256:1ae06b64755052cef4c32979aded82a18f664c66fa7b50a6d2924afac2849c6e`, - } - a.LoadLayerFromRegistry(ctx, t, layer) - r := a.Realizer(ctx).(*test.CachedRealizer) - t.Cleanup(func() { - if err := r.Close(); err != nil { - t.Error(err) - } - }) - t.Cleanup(func() { - fc.wg.Wait() // Wait for all goroutines to finish - err := checkCleanup(fc) - if err != nil { - t.Error(err) - } - }) - - realizedLayers, err := r.RealizeDescriptions(ctx, []claircore.LayerDescription{ - { - Digest: layer.Digest, - URI: "http://example.com", - MediaType: test.MediaType, - Headers: make(map[string][]string), - }, - }) - if err != nil { - t.Fatal(err) - } - for _, tt := range rpmFilesTestcases { - t.Run(tt.name, func(t *testing.T) { - ctx, cancel := context.WithCancel(zlog.Test(context.Background(), t)) - t.Parallel() - fc, err := NewFileChecker(ctx, &realizedLayers[0]) - if err != nil { - t.Fatal(err) - } - isRPM := fc.IsRPM(tt.filePath) - if tt.isRPM != isRPM { - t.Errorf("expected isRPM: %t, got isRPM: %t", tt.isRPM, isRPM) - } - cancel() - }) - } -} - -func checkCleanup(fc *filesCache) error { - fc.mu.Lock() - defer fc.mu.Unlock() - if len(cache) > 0 { - return fmt.Errorf("cache is left unclean after a second: %d items left", len(cache)) - } - if len(refs) > 0 { - return fmt.Errorf("refs left unclean after a second: %d items left", len(refs)) - } - return nil -} diff --git a/ruby/packagescanner.go b/ruby/packagescanner.go index 1e9f6e5ec..93100ef0e 100644 --- a/ruby/packagescanner.go +++ b/ruby/packagescanner.go @@ -103,12 +103,12 @@ func (ps *Scanner) Scan(ctx context.Context, layer *claircore.Layer) ([]*clairco } var ret []*claircore.Package - fc, err := rpm.NewFileChecker(ctx, layer) + set, err := rpm.NewPathSet(ctx, layer) if err != nil { return nil, fmt.Errorf("ruby: unable to check RPM db: %w", err) } for _, g := range gs { - if fc.IsRPM(g) { + if set.Contains(g) { zlog.Debug(ctx). Str("path", g). Msg("file path determined to be of RPM origin") From 3190789e0ee7ea117d1d78c5a48623ee32e299d5 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Fri, 16 May 2025 14:18:08 -0500 Subject: [PATCH 20/31] rpm: move to internal packages Signed-off-by: Hank Donnay --- rpm/dbkind_string.go | 26 --- rpm/find.go | 82 ---------- rpm/info.go | 220 ------------------------- rpm/native_db.go | 321 ------------------------------------- rpm/native_db_test.go | 140 ---------------- rpm/packagescanner.go | 63 ++++---- rpm/packagescanner_test.go | 2 +- 7 files changed, 37 insertions(+), 817 deletions(-) delete mode 100644 rpm/dbkind_string.go delete mode 100644 rpm/find.go delete mode 100644 rpm/info.go delete mode 100644 rpm/native_db.go delete mode 100644 rpm/native_db_test.go diff --git a/rpm/dbkind_string.go b/rpm/dbkind_string.go deleted file mode 100644 index 95bc7aaab..000000000 --- a/rpm/dbkind_string.go +++ /dev/null @@ -1,26 +0,0 @@ -// Code generated by "stringer -linecomment -type dbKind"; DO NOT EDIT. - -package rpm - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[kindBDB-1] - _ = x[kindSQLite-2] - _ = x[kindNDB-3] -} - -const _dbKind_name = "bdbsqlitendb" - -var _dbKind_index = [...]uint8{0, 3, 9, 12} - -func (i dbKind) String() string { - i -= 1 - if i >= dbKind(len(_dbKind_index)-1) { - return "dbKind(" + strconv.FormatInt(int64(i+1), 10) + ")" - } - return _dbKind_name[_dbKind_index[i]:_dbKind_index[i+1]] -} diff --git a/rpm/find.go b/rpm/find.go deleted file mode 100644 index d80243d83..000000000 --- a/rpm/find.go +++ /dev/null @@ -1,82 +0,0 @@ -package rpm - -import ( - "context" - "io/fs" - "path" - - "github.com/quay/claircore/internal/rpm/bdb" - "github.com/quay/claircore/internal/rpm/ndb" -) - -func findDBs(ctx context.Context, out *[]foundDB, sys fs.FS) fs.WalkDirFunc { - return func(p string, d fs.DirEntry, err error) error { - if err != nil { - return err - } - if d.IsDir() { - return nil - } - - dir, n := path.Split(p) - dir = path.Clean(dir) - switch n { - case `Packages`: - f, err := sys.Open(p) - if err != nil { - return err - } - ok := bdb.CheckMagic(ctx, f) - f.Close() - if !ok { - return nil - } - *out = append(*out, foundDB{ - Path: dir, - Kind: kindBDB, - }) - case `rpmdb.sqlite`: - *out = append(*out, foundDB{ - Path: dir, - Kind: kindSQLite, - }) - case `Packages.db`: - f, err := sys.Open(p) - if err != nil { - return err - } - ok := ndb.CheckMagic(ctx, f) - f.Close() - if !ok { - return nil - } - *out = append(*out, foundDB{ - Path: dir, - Kind: kindNDB, - }) - } - return nil - } -} - -type dbKind uint - -//go:generate -command stringer go run golang.org/x/tools/cmd/stringer -//go:generate stringer -linecomment -type dbKind - -const ( - _ dbKind = iota - - kindBDB // bdb - kindSQLite // sqlite - kindNDB // ndb -) - -type foundDB struct { - Path string - Kind dbKind -} - -func (f foundDB) String() string { - return f.Kind.String() + ":" + f.Path -} diff --git a/rpm/info.go b/rpm/info.go deleted file mode 100644 index 28875cfaa..000000000 --- a/rpm/info.go +++ /dev/null @@ -1,220 +0,0 @@ -package rpm - -import ( - "bytes" - "context" - "fmt" - "net/url" - "path" - "regexp" - "strconv" - "strings" - - "github.com/quay/zlog" - "golang.org/x/crypto/openpgp/packet" - - "github.com/quay/claircore/internal/rpm/rpmdb" - "github.com/quay/claircore/internal/rpmver" -) - -// Info is the package information extracted from the RPM header. -type Info struct { - Name string - Version string - Release string - SourceNEVR string - Module string - Arch string - Digest string - Signature []byte // This is a PGP signature packet. - Filenames []string // Filtered by the [filePatterns] regexp. - DigestAlgo int - Epoch int -} - -// Load populates the receiver with information extracted from the provided -// [rpmdb.Header]. -func (i *Info) Load(ctx context.Context, h *rpmdb.Header) error { - var dirname, basename []string - var dirindex []int32 - for idx := range h.Infos { - e := &h.Infos[idx] - if _, ok := wantTags[e.Tag]; !ok { - continue - } - v, err := h.ReadData(ctx, e) - if err != nil { - return err - } - switch e.Tag { - case rpmdb.TagName: - i.Name = v.(string) - case rpmdb.TagEpoch: - i.Epoch = int(v.([]int32)[0]) - case rpmdb.TagVersion: - i.Version = v.(string) - case rpmdb.TagRelease: - i.Release = v.(string) - case rpmdb.TagSourceRPM: - i.SourceNEVR = v.(string) - case rpmdb.TagModularityLabel: - i.Module = v.(string) - case rpmdb.TagArch: - i.Arch = v.(string) - case rpmdb.TagPayloadDigestAlgo: - i.DigestAlgo = int(v.([]int32)[0]) - case rpmdb.TagPayloadDigest: - i.Digest = v.([]string)[0] - case rpmdb.TagSigPGP: - i.Signature = v.([]byte) - case rpmdb.TagDirnames: - dirname = v.([]string) - case rpmdb.TagDirindexes: - dirindex = v.([]int32) - case rpmdb.TagBasenames: - basename = v.([]string) - case rpmdb.TagFilenames: - // Filenames is the tag used in rpm4 -- this is a best-effort for - // supporting it. - for _, name := range v.([]string) { - if !filePatterns.MatchString(name) { - // Record the name as a relative path, as that's what we use - // everywhere else. - i.Filenames = append(i.Filenames, name[1:]) - } - } - } - } - - // Catch panics from malformed headers. Can't think of a better way to - // handle this. - defer func() { - if r := recover(); r == nil { - return - } - zlog.Warn(ctx). - Str("name", i.Name). - Strs("basename", basename). - Strs("dirname", dirname). - Ints32("dirindex", dirindex). - Msg("caught panic in filename construction") - i.Filenames = nil - }() - for j := range basename { - // We only want '/'-separated paths, even if running on some other, - // weird OS. It seems that RPM assumes '/' throughout. - name := path.Join(dirname[dirindex[j]], basename[j]) - if filePatterns.MatchString(name) { - // Record the name as a relative path, as that's what we use - // everywhere else. - i.Filenames = append(i.Filenames, name[1:]) - } - } - return nil -} - -// NEVRA constructs a Name-Epoch-Version-Release-Architecture [rpmver.Version]. -func (i *Info) NEVRA() rpmver.Version { - return rpmver.Version{ - Name: &([]string{i.Name})[0], - Architecture: &([]string{i.Arch})[0], - Epoch: strconv.Itoa(i.Epoch), - Version: i.Version, - Release: i.Release, - } -} - -// Hint constructs a string suitable to be use as the "RepositoryHint". -func (i *Info) Hint() string { - v := url.Values{} - if i.Digest != "" { - switch i.DigestAlgo { - case 8: - v.Set("hash", "sha256:"+i.Digest) - } - } - if len(i.Signature) != 0 { - prd := packet.NewReader(bytes.NewReader(i.Signature)) - p, err := prd.Next() - for ; err == nil; p, err = prd.Next() { - switch p := p.(type) { - case *packet.SignatureV3: - if p.SigType != 0 { - continue - } - v.Set("key", fmt.Sprintf("%016x", p.IssuerKeyId)) - case *packet.Signature: - if p.SigType != 0 || p.IssuerKeyId == nil { - continue - } - v.Set("key", fmt.Sprintf("%016x", *p.IssuerKeyId)) - } - } - } - return v.Encode() -} - -// ModuleStream reports the module and stream from the full module version. -// -// It returns the empty string if the [Info] does not describe a package from a -// module. -func (i *Info) ModuleStream() string { - if strings.Count(i.Module, ":") <= 1 { - return "" - } - first := true - idx := strings.IndexFunc(i.Module, func(r rune) bool { - if r != ':' { - return false - } - if first { - first = false - return false - } - return true - }) - return i.Module[:idx] -} - -// FilePatterns is a regular expression for *any* file that may need to be -// recorded alongside a package. -// -// The tested strings are absolute paths. -var filePatterns *regexp.Regexp - -func init() { - // TODO(hank) The blanket binary pattern is too broad and can miss things. - // Long-term, we should add pattern matching akin to [yara] or file(1) as a - // plugin mechanism that all indexers can use. That way, the Go indexer - // could register a pattern and use a shared filter over the - // [fs.WalkDirFunc] while this package (and dpkg, etc) can tell that another - // indexer will find those files relevant. - // - // [yara]: https://github.com/VirusTotal/yara - pat := []string{ - `^.*/[^/]+\.jar$`, // Jar files - `^.*/site-packages/[^/]+\.egg-info/PKG-INFO$`, // Python packages - `^.*/package.json$`, // npm packages - `^.*/[^/]+\.gemspec$`, // ruby gems - `^/usr/s?bin/[^/]+$`, // any executable - "^/usr/libexec/[^/]+/[^/]+$", // sometimes the executables are here too - } - filePatterns = regexp.MustCompile(strings.Join(pat, `|`)) -} - -var wantTags = map[rpmdb.Tag]struct{}{ - rpmdb.TagArch: {}, - rpmdb.TagBasenames: {}, - rpmdb.TagDirindexes: {}, - rpmdb.TagDirnames: {}, - rpmdb.TagEpoch: {}, - rpmdb.TagFilenames: {}, - rpmdb.TagModularityLabel: {}, - rpmdb.TagName: {}, - rpmdb.TagPayloadDigest: {}, - rpmdb.TagPayloadDigestAlgo: {}, - rpmdb.TagRelease: {}, - rpmdb.TagSigPGP: {}, - rpmdb.TagSourceRPM: {}, - rpmdb.TagVersion: {}, -} diff --git a/rpm/native_db.go b/rpm/native_db.go deleted file mode 100644 index 3feb40c9a..000000000 --- a/rpm/native_db.go +++ /dev/null @@ -1,321 +0,0 @@ -package rpm - -import ( - "bytes" - "context" - "errors" - "fmt" - "io" - "io/fs" - "net/url" - "os" - "path" - "runtime/trace" - "strings" - - "github.com/quay/zlog" - "golang.org/x/crypto/openpgp/packet" - - "github.com/quay/claircore" - "github.com/quay/claircore/internal/rpm/bdb" - "github.com/quay/claircore/internal/rpm/ndb" - "github.com/quay/claircore/internal/rpm/rpmdb" - "github.com/quay/claircore/internal/rpm/sqlite" -) - -// NativeDB is the interface implemented for in-process RPM database handlers. -type nativeDB interface { - AllHeaders(context.Context) ([]io.ReaderAt, error) - Validate(context.Context) error -} - -// ObjectResponse is a generic object that we're expecting to extract from -// RPM database, currently either a slice of Packages or Files. -type ObjectResponse interface { - []*claircore.Package | []claircore.File -} - -// GetDBObjects does all the dirty work of extracting generic claircore objects -// from an RPM database. Provide it with a foundDB, the sys and a fn extract function -// it will create an implementation agnostic nativeDB and extract specific claircore -// objects from it. -func getDBObjects[T ObjectResponse](ctx context.Context, sys fs.FS, db foundDB, fn func(context.Context, string, nativeDB) (T, error)) (T, error) { - var nat nativeDB - switch db.Kind { - case kindSQLite: - r, err := sys.Open(path.Join(db.Path, `rpmdb.sqlite`)) - switch { - case errors.Is(err, nil): - case errors.Is(err, fs.ErrNotExist): - zlog.Warn(ctx).Err(err).Msg("rpm: unable to open sqlite db") - return nil, nil - default: - return nil, fmt.Errorf("rpm: unable to open sqlite db: %w", err) - } - defer func() { - if err := r.Close(); err != nil { - zlog.Warn(ctx).Err(err).Msg("unable to close sqlite db") - } - }() - f, err := os.CreateTemp(os.TempDir(), `rpmdb.sqlite.*`) - if err != nil { - return nil, fmt.Errorf("rpm: error reading sqlite db: %w", err) - } - defer func() { - if err := os.Remove(f.Name()); err != nil { - zlog.Error(ctx).Err(err).Msg("unable to unlink sqlite db") - } - if err := f.Close(); err != nil { - zlog.Warn(ctx).Err(err).Msg("unable to close sqlite db") - } - }() - zlog.Debug(ctx).Str("file", f.Name()).Msg("copying sqlite db out of FS") - if _, err := io.Copy(f, r); err != nil { - return nil, fmt.Errorf("rpm: error reading sqlite db: %w", err) - } - if err := f.Sync(); err != nil { - return nil, fmt.Errorf("rpm: error reading sqlite db: %w", err) - } - sdb, err := sqlite.Open(f.Name()) - if err != nil { - return nil, fmt.Errorf("rpm: error reading sqlite db: %w", err) - } - defer sdb.Close() - nat = sdb - case kindBDB: - f, err := sys.Open(path.Join(db.Path, `Packages`)) - if err != nil { - return nil, fmt.Errorf("rpm: error reading bdb db: %w", err) - } - defer f.Close() - r, done, err := mkAt(ctx, db.Kind, f) - if err != nil { - return nil, fmt.Errorf("rpm: error reading bdb db: %w", err) - } - defer done() - var bpdb bdb.PackageDB - if err := bpdb.Parse(r); err != nil { - return nil, fmt.Errorf("rpm: error parsing bdb db: %w", err) - } - nat = &bpdb - case kindNDB: - f, err := sys.Open(path.Join(db.Path, `Packages.db`)) - if err != nil { - return nil, fmt.Errorf("rpm: error reading ndb db: %w", err) - } - defer f.Close() - r, done, err := mkAt(ctx, db.Kind, f) - if err != nil { - return nil, fmt.Errorf("rpm: error reading ndb db: %w", err) - } - defer done() - var npdb ndb.PackageDB - if err := npdb.Parse(r); err != nil { - return nil, fmt.Errorf("rpm: error parsing ndb db: %w", err) - } - nat = &npdb - default: - panic("programmer error: bad kind: " + db.Kind.String()) - } - if err := nat.Validate(ctx); err != nil { - zlog.Warn(ctx). - Err(err). - Msg("rpm: invalid native DB") - return nil, nil - } - ps, err := fn(ctx, db.String(), nat) - if err != nil { - return nil, fmt.Errorf("rpm: error reading native db: %w", err) - } - - return ps, nil -} - -// FilesFromDB extracts the files that were instsalled via RPM from the -// RPM headers. -func filesFromDB(ctx context.Context, _ string, db nativeDB) ([]claircore.File, error) { - defer trace.StartRegion(ctx, "filesFromDB").End() - rds, err := db.AllHeaders(ctx) - if err != nil { - return nil, fmt.Errorf("rpm: error reading headers: %w", err) - } - var files []claircore.File - for _, rd := range rds { - var h rpmdb.Header - if err := h.Parse(ctx, rd); err != nil { - return nil, err - } - var info Info - if err := info.Load(ctx, &h); err != nil { - return nil, err - } - for _, f := range info.Filenames { - files = append(files, claircore.File{ - Path: f, - }) - } - } - return files, nil -} - -// PackagesFromDB extracts the packages from the RPM headers provided by -// the database. -func packagesFromDB(ctx context.Context, pkgdb string, db nativeDB) ([]*claircore.Package, error) { - defer trace.StartRegion(ctx, "packagesFromDB").End() - rds, err := db.AllHeaders(ctx) - if err != nil { - return nil, fmt.Errorf("rpm: error reading headers: %w", err) - } - // Bulk allocations: - ps := make([]claircore.Package, 0, len(rds)) - pkgs := make([]*claircore.Package, 0, len(rds)) - srcs := make([]claircore.Package, 0, len(rds)) // Worst-case size. - src := make(map[string]*claircore.Package) - src["(none)"] = nil - var b strings.Builder - - for _, rd := range rds { - var h rpmdb.Header - if err := h.Parse(ctx, rd); err != nil { - return nil, err - } - var info Info - if err := info.Load(ctx, &h); err != nil { - return nil, err - } - if info.Name == "gpg-pubkey" { - // This is *not* an rpm package. It is just a public key stored in the rpm database. - // Ignore this "package". - continue - } - - idx := len(ps) - ps = append(ps, claircore.Package{ - Kind: claircore.BINARY, - Name: info.Name, - Arch: info.Arch, - PackageDB: pkgdb, - }) - p := &ps[idx] - var modStream string - if strings.Count(info.Module, ":") > 1 { - first := true - idx := strings.IndexFunc(info.Module, func(r rune) bool { - if r != ':' { - return false - } - if first { - first = false - return false - } - return true - }) - modStream = info.Module[:idx] - } - p.Module = modStream - p.Version = constructEVR(&b, &info) - p.RepositoryHint = constructHint(&b, &info) - - if s, ok := src[info.SourceNEVR]; ok { - p.Source = s - } else { - s := strings.TrimSuffix(info.SourceNEVR, ".src.rpm") - pos := len(s) - for i := 0; i < 2; i++ { - pos = strings.LastIndexByte(s[:pos], '-') - if pos == -1 { - return nil, fmt.Errorf("malformed NEVR: %q", info.SourceNEVR) - } - } - - idx := len(srcs) - srcs = append(srcs, claircore.Package{ - Kind: claircore.SOURCE, - Name: s[:pos], - Version: strings.TrimPrefix(s[pos+1:], "0:"), - }) - pkg := &srcs[idx] - src[info.SourceNEVR] = pkg - p.Source = pkg - pkg.Module = modStream - } - - pkgs = append(pkgs, p) - } - zlog.Debug(ctx). - Int("packages", len(pkgs)). - Int("sources", len(srcs)). - Msg("processed rpm db") - return pkgs, nil -} - -func constructEVR(b *strings.Builder, info *Info) string { - b.Reset() - if info.Epoch != 0 { - fmt.Fprintf(b, "%d:", info.Epoch) - } - b.WriteString(info.Version) - b.WriteByte('-') - b.WriteString(info.Release) - return b.String() -} - -func constructHint(_ *strings.Builder, info *Info) string { - v := url.Values{} - if info.Digest != "" { - switch info.DigestAlgo { - case 8: - v.Set("hash", "sha256:"+info.Digest) - } - } - if len(info.Signature) != 0 { - prd := packet.NewReader(bytes.NewReader(info.Signature)) - p, err := prd.Next() - for ; err == nil; p, err = prd.Next() { - switch p := p.(type) { - case *packet.SignatureV3: - if p.SigType != 0 { - continue - } - v.Set("key", fmt.Sprintf("%016x", p.IssuerKeyId)) - case *packet.Signature: - if p.SigType != 0 || p.IssuerKeyId == nil { - continue - } - v.Set("key", fmt.Sprintf("%016x", *p.IssuerKeyId)) - } - } - } - return v.Encode() -} - -func mkAt(ctx context.Context, k dbKind, f fs.File) (io.ReaderAt, func(), error) { - if r, ok := f.(io.ReaderAt); ok { - return r, func() {}, nil - } - spool, err := os.CreateTemp(os.TempDir(), `Packages.`+k.String()+`.`) - if err != nil { - return nil, nil, fmt.Errorf("rpm: error spooling db: %w", err) - } - ctx = zlog.ContextWithValues(ctx, "file", spool.Name()) - if err := os.Remove(spool.Name()); err != nil { - zlog.Error(ctx).Err(err).Msg("unable to remove spool; file leaked!") - } - zlog.Debug(ctx). - Msg("copying db out of fs.FS") - if _, err := io.Copy(spool, f); err != nil { - if err := spool.Close(); err != nil { - zlog.Warn(ctx).Err(err).Msg("unable to close spool") - } - return nil, nil, fmt.Errorf("rpm: error spooling db: %w", err) - } - return spool, closeSpool(ctx, spool), nil -} - -func closeSpool(ctx context.Context, f *os.File) func() { - return func() { - if err := f.Close(); err != nil { - zlog.Warn(ctx).Err(err).Msg("unable to close spool") - } - } -} diff --git a/rpm/native_db_test.go b/rpm/native_db_test.go deleted file mode 100644 index 2c44f8a3d..000000000 --- a/rpm/native_db_test.go +++ /dev/null @@ -1,140 +0,0 @@ -package rpm - -import ( - "context" - "encoding/json" - "errors" - "io" - "os" - "path/filepath" - "strings" - "testing" - - "github.com/google/go-cmp/cmp" - "github.com/quay/zlog" - "golang.org/x/tools/txtar" - - "github.com/quay/claircore/internal/rpm/bdb" - "github.com/quay/claircore/internal/rpm/ndb" - "github.com/quay/claircore/internal/rpm/rpmdb" - "github.com/quay/claircore/internal/rpm/sqlite" -) - -func TestInfo(t *testing.T) { - t.Run("Files", func(t *testing.T) { - ms, err := filepath.Glob("testdata/Info.Files.*.txtar") - if err != nil { - t.Fatal(err) - } - for _, m := range ms { - ar, err := txtar.ParseFile(m) - if err != nil { - t.Fatal(err) - } - name := strings.TrimPrefix(strings.TrimSuffix(filepath.Base(m), ".txtar"), "Info.Files.") - t.Run(name, func(t *testing.T) { - t.Parallel() - ctx := zlog.Test(context.Background(), t) - // Temporary hack as some packages are moving... - filename := filepath.Join("../internal/rpm", strings.TrimSpace(string(ar.Comment))) - t.Logf("opening %q", filename) - - var want map[string][]string - for _, f := range ar.Files { - if f.Name == "want.json" { - want = make(map[string][]string) - if err := json.Unmarshal(f.Data, &want); err != nil { - t.Fatal(err) - } - break - } - } - if want == nil { - t.Fatal(`"want.json" not found`) - } - - var nat nativeDB - switch strings.ToLower(name) { - case `bdb`: - f, err := os.Open(filename) - if err != nil { - t.Fatal(err) - } else { - t.Cleanup(func() { f.Close() }) - } - var db bdb.PackageDB - if err := db.Parse(f); err != nil { - t.Fatal(err) - } - nat = &db - case `ndb`: - f, err := os.Open(filename) - if err != nil { - t.Fatal(err) - } else { - t.Cleanup(func() { f.Close() }) - } - var db ndb.PackageDB - if err := db.Parse(f); err != nil { - t.Fatal(err) - } - nat = &db - case `sqlite`: - f, err := os.Create(filepath.Join(t.TempDir(), "db")) - if err != nil { - t.Fatal(err) - } - src, err := os.Open(filename) - if err != nil { - t.Fatal(err) - } - if _, err := io.Copy(f, src); err != nil { - t.Fatal(err) - } - if err := errors.Join(src.Close(), f.Close()); err != nil { - t.Fatal(err) - } - filename = f.Name() - t.Logf("copied sqlite database to: %s", filename) - - db, err := sqlite.Open(filename) - if err != nil { - t.Fatal(err) - } else { - t.Cleanup(func() { db.Close() }) - } - nat = db - } - - rds, err := nat.AllHeaders(ctx) - if err != nil { - t.Fatal(err) - } - - got := make(map[string][]string, len(want)) - for _, rd := range rds { - var h rpmdb.Header - if err := h.Parse(ctx, rd); err != nil { - t.Error(err) - continue - } - var info Info - if err := info.Load(ctx, &h); err != nil { - t.Error(err) - continue - } - if info.Name == "gpg-pubkey" { - // This is *not* an rpm package. It is just a public key stored in the rpm database. - // Ignore this "package". - continue - } - got[info.Name] = info.Filenames - } - - if !cmp.Equal(got, want) { - t.Error(cmp.Diff(got, want)) - } - }) - } - }) -} diff --git a/rpm/packagescanner.go b/rpm/packagescanner.go index d581f624b..ff6db8ab7 100644 --- a/rpm/packagescanner.go +++ b/rpm/packagescanner.go @@ -3,6 +3,7 @@ package rpm import ( "context" + "errors" "fmt" "io/fs" "runtime/trace" @@ -11,6 +12,7 @@ import ( "github.com/quay/claircore" "github.com/quay/claircore/indexer" + "github.com/quay/claircore/internal/rpm" ) const ( @@ -24,7 +26,7 @@ var ( _ indexer.PackageScanner = (*Scanner)(nil) ) -// Scanner implements the scanner.PackageScanner interface. +// Scanner implements the [indexer.PackageScanner] interface. // // This looks for directories that look like rpm databases and examines the // files it finds there. @@ -32,19 +34,22 @@ var ( // The zero value is ready to use. type Scanner struct{} -// Name implements scanner.VersionedScanner. +// Name implements [indexer.VersionedScanner]. func (*Scanner) Name() string { return pkgName } -// Version implements scanner.VersionedScanner. +// Version implements [indexer.VersionedScanner]. func (*Scanner) Version() string { return pkgVersion } -// Kind implements scanner.VersionedScanner. +// Kind implements [indexer.VersionedScanner]. func (*Scanner) Kind() string { return pkgKind } // Scan attempts to find rpm databases within the layer and enumerate the // packages there. // // A return of (nil, nil) is expected if there's no rpm database. +// +// Deprecated: In-tree [indexer.PackageScanner] implementations should almost +// certainly use the "internal/rpm" and "internal/dnf" packages. func (ps *Scanner) Scan(ctx context.Context, layer *claircore.Layer) ([]*claircore.Package, error) { if err := ctx.Err(); err != nil { return nil, err @@ -63,32 +68,36 @@ func (ps *Scanner) Scan(ctx context.Context, layer *claircore.Layer) ([]*clairco return nil, fmt.Errorf("rpm: unable to open layer: %w", err) } - found := make([]foundDB, 0) - if err := fs.WalkDir(sys, ".", findDBs(ctx, &found, sys)); err != nil { - return nil, fmt.Errorf("rpm: error walking fs: %w", err) - } - if len(found) == 0 { - return nil, nil - } - - zlog.Debug(ctx).Int("count", len(found)).Msg("found possible databases") - - var pkgs []*claircore.Package - done := map[string]struct{}{} - for _, db := range found { - ctx := zlog.ContextWithValues(ctx, "db", db.String()) - zlog.Debug(ctx).Msg("examining database") - if _, ok := done[db.Path]; ok { - zlog.Debug(ctx).Msg("already seen, skipping") - continue - } - done[db.Path] = struct{}{} - ps, err := getDBObjects(ctx, sys, db, packagesFromDB) + var out []*claircore.Package + dbs, errFunc := rpm.FindDBs(ctx, sys) + defer func() { + err = errors.Join(err, errFunc()) + }() + for db := range dbs { + err = func() error { + ctx := zlog.ContextWithValues(ctx, "db", db.String()) + zlog.Debug(ctx).Msg("examining database") + db, err := rpm.OpenDB(ctx, sys, db) + switch { + case err == nil: + case errors.Is(err, fs.ErrNotExist): + return nil + default: + return err + } + defer db.Close() + for pkg, err := range db.Packages(ctx) { + if err != nil { + return err + } + out = append(out, &pkg) + } + return nil + }() if err != nil { return nil, err } - pkgs = append(pkgs, ps...) } - return pkgs, nil + return out, nil } diff --git a/rpm/packagescanner_test.go b/rpm/packagescanner_test.go index 7cce81a3c..5ecf609c4 100644 --- a/rpm/packagescanner_test.go +++ b/rpm/packagescanner_test.go @@ -107,7 +107,7 @@ func TestPackageDetection(t *testing.T) { seq := rpmtest.PackagesFromManifest(t, slices.Values(m.RPMs)) want := wart.CollectPointer(seq) - opts := rpmtest.Options(t) + opts := rpmtest.Options(t, nil) if !cmp.Equal(got, want, opts) { t.Error(cmp.Diff(got, want, opts)) } From 633d7c7f214d47a3495d621231b3fc3a2789a848 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Fri, 16 May 2025 15:19:42 -0500 Subject: [PATCH 21/31] periodic: update to new interfaces Signed-off-by: Hank Donnay --- test/periodic/rpm_test.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/periodic/rpm_test.go b/test/periodic/rpm_test.go index ec7b7dd78..8f1e12254 100644 --- a/test/periodic/rpm_test.go +++ b/test/periodic/rpm_test.go @@ -15,7 +15,7 @@ import ( "github.com/quay/zlog" "github.com/quay/claircore" - "github.com/quay/claircore/rpm" + "github.com/quay/claircore/rhel" "github.com/quay/claircore/test" "github.com/quay/claircore/test/fetch" "github.com/quay/claircore/test/rpmtest" @@ -25,6 +25,8 @@ import ( // container images, then fetches and indexes the manifest and compares it to // the published RPM manifest for the image. func TestRPMSpotCheck(t *testing.T) { + // TODO(hank) This should be unified with the + // "test/cmd/fetch-container-rpm-manifest" command. ctx := context.Background() // This is the URL for our search query. Needs to get Solr search parameters // added to the RawQuery member. @@ -220,7 +222,7 @@ func (doc hydraDoc) Run(dir string) func(*testing.T) { want := rpmtest.PackagesFromRPMManifest(t, io.TeeReader(res.Body, buf)) defer logResponse(t, res.Request.URL.Path, buf)() - s := &rpm.Scanner{} + s := &rhel.PackageScanner{} pkgMap := map[string]*claircore.Package{} var which claircore.Digest for i := len(image.Data[0].Parsed.Layers) - 1; i >= 0; i-- { @@ -260,7 +262,7 @@ func (doc hydraDoc) Run(dir string) func(*testing.T) { if len(want) != len(got) { t.Errorf("wanted %d packages but got %d", len(want), len(got)) } - opts := rpmtest.Options(t) + opts := rpmtest.Options(t, nil) if !cmp.Equal(got, want, opts) { t.Error(cmp.Diff(got, want, opts)) } From b959049774fe18ad3b7cf36bc832e4e52ba9d583 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Mon, 19 May 2025 14:49:10 -0500 Subject: [PATCH 22/31] ndb: remove unused code Signed-off-by: Hank Donnay --- internal/rpm/ndb/index.go | 215 ----------------------------- internal/rpm/ndb/index_test.go | 32 ----- internal/rpm/ndb/ndb.go | 134 ------------------ internal/rpm/ndb/package.go | 18 --- internal/rpm/ndb/package_test.go | 10 +- internal/rpm/ndb/testdata/Index.db | Bin 1916928 -> 0 bytes 6 files changed, 5 insertions(+), 404 deletions(-) delete mode 100644 internal/rpm/ndb/index.go delete mode 100644 internal/rpm/ndb/index_test.go delete mode 100644 internal/rpm/ndb/testdata/Index.db diff --git a/internal/rpm/ndb/index.go b/internal/rpm/ndb/index.go deleted file mode 100644 index fe77ab5d1..000000000 --- a/internal/rpm/ndb/index.go +++ /dev/null @@ -1,215 +0,0 @@ -package ndb - -import ( - "bytes" - "errors" - "fmt" - "io" -) - -// Index is an index over an RPM tag. -type Index struct { - // SlotSpace reads the slot section of the Index. - slotSpace *io.SectionReader - // KeySpace reads the key section of the Index. - keySpace *io.SectionReader - // HMask is the mask for hash keys. - hMask uint32 - - indexHeader -} - -// IndexHeader is the header for a tag index. It's meant to be embedded. -type indexHeader struct { - Generation uint32 - NSlots uint32 - UsedSlots uint32 - DummySlots uint32 - XMask uint32 - KeyEnd uint32 - KeyExcess uint32 -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler for an Index header. -func (i *indexHeader) UnmarshalBinary(b []byte) error { - const ( - magic = ('R' | 'p'<<8 | 'm'<<16 | 'I'<<24) - version = 0 - - offsetMagic = 0 - offsetVersion = 4 - offsetGeneration = 8 - offsetNSlots = 12 - offsetUsedSlots = 16 - offsetDummySlots = 20 - offsetXMask = 24 - offsetKeyEnd = 28 - offsetKeyExcess = 32 - offsetObsolete = 36 - ) - if len(b) < 64 { - return io.ErrShortBuffer - } - if le.Uint32(b[offsetMagic:]) != magic { - return errors.New("ndb: index: bad magic") - } - if le.Uint32(b[offsetVersion:]) != version { - return errors.New("ndb: index: bad version") - } - i.Generation = le.Uint32(b[offsetGeneration:]) - i.NSlots = le.Uint32(b[offsetNSlots:]) - i.UsedSlots = le.Uint32(b[offsetUsedSlots:]) - i.DummySlots = le.Uint32(b[offsetDummySlots:]) - i.XMask = le.Uint32(b[offsetXMask:]) - i.KeyEnd = le.Uint32(b[offsetKeyEnd:]) - i.KeyExcess = le.Uint32(b[offsetKeyExcess:]) - // 4 bytes "obsolete" - // 24 bytes padding - return nil -} - -// IndexPair is the package index and data offset. -type IndexPair struct { - Package uint32 - Data uint32 -} - -// Lookup returns the pair (if any) for the provided key. -func (i *Index) Lookup(s string) (pg []IndexPair, err error) { - // NOTE(hank) This is a pretty straight forward port of the C version. - const ( - slotSize = 8 - skip = ^uint32(0) - - offsetKey = 0 - offsetOffset = 4 - ) - var keyoff, x uint32 - keyh := murmur(s) - b := make([]byte, slotSize) -Look: - for h, hh := keyh&i.hMask, uint32(7); ; h, hh = (h+hh)&i.hMask, hh+1 { - off := int64(8 * h) - if _, err := i.slotSpace.ReadAt(b, off); err != nil { - return pg, fmt.Errorf("ndb: index: failed to read slot@0x%08x: %w", off, err) - } - x = le.Uint32(b) - switch { - case x == 0: - break Look - case x == skip: - continue - } - if keyoff == 0 { - switch { - case ((x ^ keyh) & i.XMask) != 0: - continue - case !i.equalkey(x & ^i.XMask, s): - continue - } - keyoff = x - } - if keyoff != x { - continue - } - data := le.Uint32(b[offsetOffset:]) - var ovldata uint32 - // If flagged for overflow, read the overflow segment: - if data&0x80000000 != 0 { - off += 4 * int64(h) - if _, err := i.slotSpace.ReadAt(b[:4], off); err != nil { - return pg, fmt.Errorf("ndb: index: failed to read overflow slot@0x%08x: %w", off, err) - } - ovldata = le.Uint32(b) - } - pg = append(pg, i.decodeData(data, ovldata)) - } - return pg, nil -} - -func (i *Index) equalkey(keyoff uint32, s string) bool { - if int64(keyoff)+int64(len(s))+1 > i.keySpace.Size() { - return false - } - l := len(s) - var b []byte - switch { - case l < 255: - b = make([]byte, 1+l) - case l < 65535: - b = make([]byte, 3+l) - default: - b = make([]byte, 7+l) - } - n, _ := i.keySpace.ReadAt(b, int64(keyoff)) - b = b[:n] - switch { - case l < 255: - if b[0] != uint8(l) { - return false - } - b = b[1:] - case l < 65535: - if b[0] != 255 || le.Uint16(b[:1]) != uint16(l) { - return false - } - b = b[3:] - default: - if b[0] != 255 || b[1] != 255 || b[2] != 255 || le.Uint32(b[3:]) != uint32(l) { - return false - } - b = b[7:] - } - return bytes.Equal([]byte(s), b) -} - -func (i *Index) decodeData(data, ovldata uint32) (t IndexPair) { - switch { - case (data & 0x80000000) != 0: - t.Data = data ^ 0x80000000 - t.Package = ovldata - case (data & 0x40000000) != 0: - t.Data = (data ^ 0x40000000) >> 24 - t.Package = data & 0xffffff - default: - t.Data = data >> 20 - t.Package = data & 0xfffff - } - return t -} - -func (i *Index) encodeData(pkgIdx, datIdx uint32) (data, ovldata uint32) { - switch { - case (pkgIdx < 0x100000 && datIdx < 0x400): - ovldata = 0 - data = pkgIdx | datIdx<<20 - case (pkgIdx < 0x1000000 && datIdx < 0x40): - ovldata = 0 - data = pkgIdx | datIdx<<24 | 0x40000000 - default: - ovldata = pkgIdx - data = datIdx | 0x80000000 - } - return data, ovldata -} - -// Parse closes over the provided [io.ReaderAt] and populates the provided Index. -func (i *Index) Parse(r io.ReaderAt) error { - const ( - indexSlotOffset = 64 - indexKeyChunksize = 4096 - ) - b := make([]byte, indexSlotOffset) - if _, err := r.ReadAt(b, 0); err != nil { - return fmt.Errorf("ndb: index: unable to read bytes: %w", err) - } - if err := i.indexHeader.UnmarshalBinary(b); err != nil { - return fmt.Errorf("ndb: index: unable to unmarshal header: %w", err) - } - - i.hMask = i.NSlots - 1 - i.slotSpace = io.NewSectionReader(r, indexSlotOffset, int64(i.NSlots)*12) - i.keySpace = io.NewSectionReader(r, indexSlotOffset+(int64(i.NSlots)*12), int64(i.KeyEnd)) - - return nil -} diff --git a/internal/rpm/ndb/index_test.go b/internal/rpm/ndb/index_test.go deleted file mode 100644 index e85d75086..000000000 --- a/internal/rpm/ndb/index_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package ndb - -import ( - "os" - "testing" - - "github.com/quay/claircore/internal/rpm/rpmdb" -) - -func TestLoadIndex(t *testing.T) { - idxf, err := os.Open("testdata/Index.db") - if err != nil { - t.Fatal(err) - } - defer idxf.Close() - var xdb XDB - if err := xdb.Parse(idxf); err != nil { - t.Fatal(err) - } - idx, err := xdb.Index(rpmdb.TagName) - if err != nil { - t.Fatal(err) - } - p, err := idx.Lookup("filesystem") - if err != nil { - t.Fatal(err) - } - t.Logf("%+#v", p) - if p[0].Package != 3 { - t.Fail() - } -} diff --git a/internal/rpm/ndb/ndb.go b/internal/rpm/ndb/ndb.go index 22fb81258..42e865236 100644 --- a/internal/rpm/ndb/ndb.go +++ b/internal/rpm/ndb/ndb.go @@ -3,11 +3,7 @@ package ndb import ( "context" "encoding/binary" - "errors" - "fmt" "io" - - "github.com/quay/claircore/internal/rpm/rpmdb" ) var le = binary.LittleEndian @@ -32,133 +28,3 @@ func CheckMagic(_ context.Context, r io.Reader) bool { m := le.Uint32(b) return m == xdb || m == pkg } - -// XDB is the "xdb" a.k.a. "Index.db", the ndb mechanism for creating indexes. -type XDB struct { - r io.ReaderAt - lookup map[rpmdb.Tag]*xdbSlot - slot []xdbSlot - xdbHeader -} - -// Parse closes over the passed [io.ReaderAt] and populates the XDB. -func (db *XDB) Parse(r io.ReaderAt) error { - const headerSize = 32 - h := make([]byte, headerSize) - if _, err := r.ReadAt(h, 0); err != nil { - return fmt.Errorf("xdb: unable to read header: %w", err) - } - if err := db.xdbHeader.UnmarshalBinary(h); err != nil { - return fmt.Errorf("xdb: bad header: %w", err) - } - pg := make([]byte, db.PageSize*db.SlotNPages) - if _, err := r.ReadAt(pg, 0); err != nil { - return fmt.Errorf("xdb: unable to read slots: %w", err) - } - - // Size for full pages of slots. - max := (len(pg) / slotSize) - slotStart - db.lookup = make(map[rpmdb.Tag]*xdbSlot, max) - db.slot = make([]xdbSlot, max) - n := 0 - var x *xdbSlot - for off := slotStart * slotSize; n < max; n, off = n+1, off+slotSize { - x = &db.slot[n] - if err := x.UnmarshalBinary(pg[off:]); err != nil { - return err - } - if x.Tag == 0 || x.Tag == rpmdb.TagInvalid { - break - } - db.lookup[x.Tag] = x - } - db.slot = db.slot[:n] - db.r = r - return nil -} - -// Index reports the index for the specified tag. -func (db *XDB) Index(tag rpmdb.Tag) (*Index, error) { - slot, ok := db.lookup[tag] - if !ok { - return nil, fmt.Errorf("ndb: no such tag %d", tag) - } - off, ct := int64(slot.StartPage*db.PageSize), int64(slot.PageCount*db.PageSize) - r := io.NewSectionReader(db.r, off, ct) - var idx Index - if err := idx.Parse(r); err != nil { - return nil, err - } - return &idx, nil -} - -type xdbHeader struct { - Version uint32 - Generation uint32 - SlotNPages uint32 - PageSize uint32 - UserGeneration uint32 -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler for the xdb header. -func (h *xdbHeader) UnmarshalBinary(b []byte) error { - const ( - headerSz = 32 - magic = 'R' | 'p'<<8 | 'm'<<16 | 'X'<<24 - version = 0 - - offsetMagic = 0 - offsetVersion = 4 - offsetGeneration = 8 - offsetSlotNPages = 12 - offsetPageSize = 16 - offsetUserGeneration = 20 - ) - - if len(b) < headerSz { - return io.ErrShortBuffer - } - if le.Uint32(b[offsetMagic:]) != magic { - return errors.New("xdb: bad magic") - } - h.Version = le.Uint32(b[offsetVersion:]) - if h.Version != version { - return errors.New("bad version") - } - h.Generation = le.Uint32(b[offsetGeneration:]) - h.SlotNPages = le.Uint32(b[offsetSlotNPages:]) - h.PageSize = le.Uint32(b[offsetPageSize:]) - h.UserGeneration = le.Uint32(b[offsetUserGeneration:]) - return nil -} - -type xdbSlot struct { - Subtag uint8 - Tag rpmdb.Tag - StartPage uint32 - PageCount uint32 -} - -func (s *xdbSlot) UnmarshalBinary(b []byte) error { - const ( - magic = ('S' | 'l'<<8 | 'o'<<16 | 0x00<<24) - magicMask = ^uint32(0xFF << 24) - - magicOffset = 0 - subtagOffset = 3 - tagOffset = 4 - startOffset = 8 - countOffset = 12 - ) - if len(b) < slotSize { - return io.ErrShortBuffer - } - if le.Uint32(b[magicOffset:])&magicMask != magic { - return fmt.Errorf("slot: bad magic") - } - s.Subtag = b[subtagOffset] - s.Tag = rpmdb.Tag(le.Uint32(b[tagOffset:])) - s.StartPage = le.Uint32(b[startOffset:]) - s.PageCount = le.Uint32(b[countOffset:]) - return nil -} diff --git a/internal/rpm/ndb/package.go b/internal/rpm/ndb/package.go index cb2434ed8..860fff347 100644 --- a/internal/rpm/ndb/package.go +++ b/internal/rpm/ndb/package.go @@ -80,24 +80,6 @@ func (db *PackageDB) Headers(_ context.Context) iter.Seq2[io.ReaderAt, error] { } } -// AllHeaders returns ReaderAts for all RPM headers in the PackageDB. -func (db *PackageDB) AllHeaders(_ context.Context) ([]io.ReaderAt, error) { - r := make([]io.ReaderAt, len(db.slot)) - var err error - for i, s := range db.slot { - r[i], err = db.GetHeader(s.Index) - if err != nil { - return nil, err - } - } - return r, nil -} - -// Validate is currently here to fulfill an interface. -func (db *PackageDB) Validate(_ context.Context) error { - return nil -} - // GetHeader returns an [io.ReaderAt] populated with [rpm.Header] data or // reports an error. func (db *PackageDB) GetHeader(pkgID uint32) (io.ReaderAt, error) { diff --git a/internal/rpm/ndb/package_test.go b/internal/rpm/ndb/package_test.go index b4ce7961a..3014725bd 100644 --- a/internal/rpm/ndb/package_test.go +++ b/internal/rpm/ndb/package_test.go @@ -33,11 +33,11 @@ func TestLoadPackage(t *testing.T) { if err := pkg.Parse(pkgf); err != nil { t.Fatal("error parsing Packages file", err) } - rds, err := pkg.AllHeaders(ctx) - if err != nil { - t.Fatal("error getting AllHeaders", err) - } - for _, rd := range rds { + for rd, err := range pkg.Headers(ctx) { + if err != nil { + t.Error(err) + continue + } var h rpmdb.Header if err := h.Parse(ctx, rd); err != nil { t.Fatal(err) diff --git a/internal/rpm/ndb/testdata/Index.db b/internal/rpm/ndb/testdata/Index.db deleted file mode 100644 index ccc64763123227050d6e8d2013c1108216b60101..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1916928 zcmeEP2YegV{eO2S+47bXJJU%_24u;S?bumBoH))R!^Bwx5?hwewqjWl8qQ!Ogjq&$ zX=z!7ltQ5cFl80W2vDG`lF~9-R)Eq!v``F%LZNN`-`}0?`6Qh@LZDFYK8fz$d%yL* z@ArOhobl-^`vY!QfO$I~C9JO|HO`AC$9 zkcKFQemK$>F1DMpiAG5^kQB5PNbLX(sv_$tS)^Y((80-Jo1a|(_d!V#KZK5UIfhk zVD^VzZ&2g8neIiv>>p79=kq5MB=+C{_qpgYt>YplO3-C-cqDn2oMx^1oorP|Nncw6_*w zS1z<2g#JgwRnH%N5PY8(%f+nmtlZB*_;c3sDQ6hSEfYqZKhhvy%Obwsn5yOW-hV5u zZJXDd0$Q*ln)k%OQgDCx<+`FYs|7z%?Tr2vCu(f=GmcV_wb?o#`UHbEWJlB%d)}~YP zBwKSCeIFp*^(NcUQE&Gz(BKG32b@r{S*y96f)m!3Zc_ZD&3CshW_$5{XN zm+c1mUsTqa(x($veNoE(3wrJm@=7N`Z&-Nzg>j!j|C_?@v!;9o{{I&1*}{$Q9M*^O zm6pdcn|0+Yg;Q6T=+eoLZ%E%fkG|uQeC-s+uA=YO4EB0TczgH}I;MQfO|Nd$rIR1u zXE#qTPR<-e+9o+F>IOkSSkg^wZb@bzOaikk$JdZjuD7KRK3boW+keLGmVHAyK-S5w z%+Au0-za@Iuv(W+_jtK9vAaH9;r~$n6lveL>APGn2*X^H2T-qa>2BW=&|Pf#uH82P z`hz7oQuuZuedlek*LiHzcKUAJV6RQ$gu7-8mg#e(&tjF9^U4kKle65`$jv7wXMTqCeXQ(O`o8jDuN>>lN26f6o!xy(!C;v`1N~pc2|t~0 z!2dJme<|M}|BK4{zGd2yEe6Ui5{v#h#~}Z|m3621$w%~^aPvw;V7H~}vDU;aGi4%R zB48q5B48q5B48q5B48q5B48q5B48q5BJg!bAiKrqmmMAMR-eZn*&d0?9gbK;4m-lZ zU{onnGlw<@gORAi@AJrkh+N)SUESy!>Iu6&?S5ag!|U@z9gz;V-=B-5-|G%JyzZ!b z2oh0WIOK5z@Mc~l%}bEqsf zq;^E2-f|+1$f2OWoU;5oW;n`;vNhD|ki+3%*hK^~F}X7Fu!|fq?f!4NYGz6X*RNNd6Mp5fvM@KNAs8ch%vPZEZ7V~-42d~_z zlmmt^D(jCZn!wly<0{CsW`8?~>8Zu*i?o*$3NX?UXmyd^Sil#FhJAt7ilX*dv(Mx3 z2R&}IjXUgV^L5HrknAWYd?P3NeNnm6;iB4wJYhMGM~AzLD(8>6s~RgERYck@Z;wTN zu!TrlJ3{3OMy(!CV?;5;=M7Xilsv@)6q5k8XWF!Cf-n^EDZBriH(P+3l1K#G3g~*!rNV9tuLEw%=V(x&_ zWIKF8rG~Lcv!lGx<#17bBC_8Xh;38b8fixbl_);qYxSrpQXUEiw{2J0!?N289(ksM zmfYbExLf6N3pBN5(uX6`mhBI=`T~t!xg}!pgnU5~7YxC-BmVNna&p|>l;Rl#hwN`r zP}|l4&#h2wQ+kZom5>U@Q)@1DTuVoevj8tw|4n_N3+LAUKA=XceMMWuFUvDUi_}sIVbLk=n>@w9=F4T zPUdUzdE8MsGCV2m=m_pW4|8WzPz=SW|9{;FIJ5pH0ww|`0ww|`0ww|`0ww|`0ww|` z0ww|`0ww|`0ww|`0ww|`0ww|`0ww|`0$(izwDbQ&`f(l(&=B~K^bQ=jPJduanrhu+ z@%=$!dsB|w+Glxji^S}Cms{W8D6#z|ol} zT}P%a$M1+F=CY}J_KuC;i}nd?Pmx%+^e-tZCb3d}bl)E>W6lSCUYxHmZXf-mOu5u_ z(`c2?UMySg{zPJ3IXkRn-+?^^YQ1_!-72oxC$XlqM=PjuN{4E4<9fNCbwczyiPdnl zH9GCC>g^d`!AgN&@1^oF{KyMws7HHbs(hua-C9xv{RQV) z$2w91DC4RJ^*!sd9Q!>BZ$Wy@`7H-1!;n!kUPDsPuXP1kUI33Iw>uv9cJcnN%4yUW?yB+pVg+ zCVte0%2z+^BX;F})SLT#-2N23n!M+wTZchkO25#`)7@3RdVUm+s)wbtb38w-e`xZ@ zN?GqB4rQLqUi%bx)^2&B5beR^xJH+JSNZI`e#5Lc+yi`)@ZTH9zcj^;Z0nP|5a;q# zzMc|QuWQ6nQX6oz^Zt;mcZ5_r1URSoi^|u-?NRGrI&7D8(NO5IseJni7F+$7qn_N( zWcgZJwEQ}Rc)|T)u|<9nc5z%bi&a$^&v@KZ_0{kr4pqHfLsY&V-VZeS+TCf{wG((} z$N5um%48=ZnDT0AY)s{IrN~v~>=|={<>4P7e&(p@{XG7}>s5S>#rF>4bjmzWQ=sy9 z4Xn}t9`&J&R@#oyrw7lK1X`%Fm!6$f7pQ? zXeZvERDbE>{mz(gpZ!D2c+6AxP| z^tZ&zFpl+DRle>*)lckv9-#8=vX)wY_7wb&`$Zg=ajIT>ihXK%%`la3UvXSt(Lbb1 z8{kjzcHdQaqqP4wz`5Uepz`$|g{AV<^Y%@~Wv}$e9N3#y?(LS7OMq93AKYST!2Gx? zSG9K+uUEXjS{IzkBk9r28}m#TLkw`+y)#1!-=KAz0Ctot_FIp@l8WO)bj zo8tb~G;D=62b1`{`KsO!k6S7ZdwD%nzAirgp2MEK2=R)kcJ4#v&2AOveepQ4 zhtJHV^6e{9>2?kOKyW~B4OZ0Z^@Q{s{AdsFS1Mm9 zKL0D_^-}pl)@Q_jVBOb~q4L@J_^rv)?yA0;e&eJ@-``!8x4&O`Zwr&g0~}tzbaL~> zj4b#ar&Ia5tx?MjO&Di$rU=KJfIII$$#PVC_VW446w9DcAdIB-0ry+gu26}}*Hdtpbjw26n-#Zz)ZvzEeg%2iPfMr$6a6$x z)fM~M5wT;VpvOO`gCtMyd=yrc%P;oWAr=3np^K2B>y zD!+2%kd~EjSNZCT-?cn*I^qm(uQ^Ly2N_joBdcP*#gMB!bd4nZ}{uRnq?c6s;<#P>D`Rs+N-kzZ<9^FH> zNWZ)QcGy(DZa$vI?dRzrv+f3+HXkom`Fi5}o@|s_|GgY{&8~RbT7l*eG z%ckQnPUZepJOlIV(&V_q{k75ZkJacm+&@&lE?)06YM9E`&F8VnbWgM8lhCdy^O8SX znk=x3$3?ZiO*{@H%hA#*Usp<;*2=Z}wc<&L6E5y&4VD}8k>>T&=(M}4fB%q$*5eVc zy7)fD2FZ(Yu_^vuq?GRqerj1zj(C)Jfu;66;F{ZD{V)^ll*HFn7}q=ebj!@m@ZVgO z&sC!G*+*W%{(2|)*!vcC74&jEG`m#3p0xc+#7mZ&5I<}3 zP7@x$IM|&s&a3u!js33p?gTh(hKk3Yu|4d-E$|CrhV_hzxaU_{+K$9Hl>M+Jm&Oww zCp3Gt`wXe<5tL`Da&{G|e4$|~U-u{#=breyosE5ywLA)(1(mNmzE8QA$H92}#OFn9 z_|;Oz7~sz1g<4+9{Z+*wl+sUMW!-46dO^jbe)M0YHmo~(xE#%X?Y@CMbwBFO{$qLZ zE%ehoRj+;MZ9>LU*el&-DaE>~I|T<7uWlY^RQ~#sv#eP;Xy*b|Z+BXMpJcuGHTY|O zx%H~0d_JVnYj>4zKlj6X#n-UT+r|6q1!Be~*k!d_i$}va zUVpV7Oxxc~JD#e1`${HTgDc?ooL|$QeE){9{TZ|`w7v9g*@c5KYJ z-@X*P%cO$mp^wM^mxcTXk>>5L*{9uq#b)1%{w1h5D8&Gl*Y+I^ew#~}PW z3CGg-`^Y99$Kv>ooGXr-hj!+EGFi04zxP@KmhKmD=k=W=U4ePp-pmVyOvKrJT)w9F za`7C*8+(SzS3g38(C$YI> z{%D3T;ER@dEnD23?p(jOED}_dmU(kio6=hx< z&Oq$MVTX}Sob|Oe7;ewJkGb9q(5?L+S`bEp%F&h0b5hC~FPG zLakCb7O+GBduIG7JSh_Hl(uf&n(1lvIgp>x7WD=_5ee!gXwE8IT3hG9ae~{j%Fs5- zlN5`DGkpP%KjxJSaD?GjI^!|qkKqu!NLHx5RYf5?EYlH$o~Z22RL@lNW~lc(_2vkH zLXKL~}}q%$*2buaT;mFAFeQlAC? z%ju(nJ}T*B27Oe~M>T!Sq>owjF`GUDRvZEs#<6r^Po_H*qH`y6amQ(E?kJrvXQ9I> zCE#NV;j~H|1Q@ZahY&jGFgQP*qGnZm!rJQYkRz5h*&h;WMR!XjSkuc6P{CG@$l zPW0{&WxrMSH!fZ+%7F|yP_wjtehzNULBIFJSTLH2XYGzUZMDjQ#`$aMvvxjxE?z*N zD>u^T+6GY$iZES{G|pd5pS8=C&sEB&lCw~GuB)Y-x(51OyoNrPtfbEs8|ZW8Qu?fi ze0wuH$%`dmVvi&l%R zZn4!bw#LLZS#0x(ZDFx3CITU!SM)_hU)1W05-~oPt`WDmv$nV!m(`cmt*y;gpBk1e zZOBm{<(Ow#z1ZF^ws(l_0kIu_Mk*@$JK-okv7=q=@QWQ`G0a1$Yiv1Hf&S7z~Rcw;1wUL;lA4cjbx|? zf95Q&ZCp{;&@g{-UBg#+fH6%s5ik)j5ik)j5ik)j5ik)j5ik)j5ik)j5ik)j5ik)j z5ik)j5ik)j5ik)j5ik)L3C(xMRG#+7SINYEq)86{@k}3d11%zX{Kq$7qV&9hGWS78 za{B!-QXl;N6_NauAOH2obP(mFNB^VSCz-oE<;PAsxkP^|(tl&C|1n>e-`^wg)qsfZ zX@8{KhmiZ3XrUjyk=_M;(4{LPy=i}>myXFGpX``mke{42N_hSob-GN_Z}ej;k~d99 zM|_KP>A^k{zXwbtcZrUf^e;x5?)=BXNdH)vT_fx0v`3QDsU-~VB!8(ve!47@ce1XK z^!kt{d+0|~{}$e4**Tsb0Hv`J{h`E}i@+u&4e- zKMo~5+mZ|WNRyrVA2E{N)BB)LE+W0_lQR!tn(SMylSgU#vGQDD>!@|Q{6qbCDvMO{ zA93~}{3+pjYrC$T_@?U8+9TPW_D8fD5$?pFdPxT{TZaLQk0kpEe;NU#613K;-D*+1TZj`W8O^1tXTvSaIKP&%1?_!9jX zo9bCV2sy;pdpb)mBiXaPH<|W{`1zrLX{q`zAUPBJCsXP-X#jL2uVMgngC!xkGY8Am z2R*gdvAS}SKTDUU^22rML-j~{mK`c#1CT@dP8Vu1UA-wC)1}Qv69E$e z69E$e69E$e69E$e69E$e69E$e69E$e6M?TS0;B80IDpO*^>zB9+ntMWXkBS6>ht@e zJ~@)zuswo9(wvLhBI6dyow7d|>W~9b=W<_j*c}Fev$oV7@Rrt2n`V!b@}h|ea#yN{ z==lPz&gBc|*E?(dJ_w5B#JLvW?7&e88r*@_7@gJTte3<7L>qOo8XA`5tPMm$vd7or zlf6SUd+F#s#q>yCJnI-a9FYB5ssV?*`6FWzOq?I~v;hQIxB%zG#X_YCrFx~ZCl&@+ zg>lgnKBZ+I|ZFIs{?g}~T)=r@tl0dvF+9rn+>j|c)bFJ1E z1#xZl@k8v26WAM)ZE^>I9yQizV^|e^If{v%(qrW9U#30iuWes6D{dlSB48q5B48q5 zB48q5B48q5B48q5B48q5B48q5B48q5B48q5B48q5B48q5B48q5BJj0FKs*0WqQf(A zAf7;Xt>|)OuldZak_STPMn%CM@L8e zL&5(|$LYYWE5%A`SC77aaf*M7#S4$t$r(5I?Cc=YDlRTAhwN{H{t9W_hjwNc)=2U( z5-YWk-Xfh{9g^iD{2mcKF7YBh{Qf$nJrk*VQ&YNHh9xUU`iGWxuZ5q9cUvN1;AK5w%C(V=I=_9! za_pOxY`;Kyk7fG=O$5nn&=R_PnYD8P>=&MywdPk_&`TFuU*C`Tl)c{i?rk}&NhCQw zW>@T?^Z3$TgeUyn@_p+sZa)fsPIhcz-8@Qad?XLQ6O?{u-Q^1hug~w z;twP*$m%81<7eF*f2tRq$Cr`O`CG&-e&oThjLN$aFL+!ee{+M5{J#(C6n|8Sx6$g{lN3ojEqZjSdH*X=Ymoz+c%C{u8kH;mdp9g;A$h`bv z_#ele;xpn=ik)Ycp9cN)BH2ghV$fZG9v|6(e$VBn7!uF8HM6P~{>Z3aL7l%P)4!5= zYYmJLKg_)Pbpdt~oIi!y`k8ih*}e@sTr>psd6Azq>FoGt`LImj&izhf{^&|VofS>Sj>*Nq$rLG+)-UoH%n*4Nk;>Y}g<3a6=IGc_hn4CvkaH19-WH5Y$#T-A%d&T7Pte&-IC)r83i;0L*(>4nd@5Hx zbJekOc4;zcs2Xp`)p`0s*nDhM6%nDIHU1VyUPZ4XywWG#W|mDkXVS@ zr&6C&6S+5(H2`}^ujyKh-R3kRH z|21brJNiez{n>z3$*P}Q|F58KTwa)a(Zu;WoOb6<#k{>M#coaBQ@LY)ZAZM;uJ>}! zy+19nMua=@RbsrO`W=Qe@zHq))K0weNDs@)`xO4lMUr3mS&hPfEb9_LqFlsh)6D~% zc~3A&ha;7@8uZ7LW`3gt^Ghq0XY1NQlbd{R$+J9B3H{o2M&6L8T{`?oP7dPQlo_sH zqaSiVp?Xf#m~f}G{`?-YV++Q+`m(>3`{2*oMe_1s_v?8N+J@`=YhL;OzxgnJXmrOq z$4tX`#_`C=->@wk^i%R5#k#@H{o|FX_EVeCz9hF$hX=I>#$#*AtR1l}7%z^@&zQed zr*Bh!Ddg;7WM>ffOY(zPAE_(X?9lF1zez|uI{SIl%f)dZJ(w4X_vODe1@h9yDNRng z`)|uDzYTmvs>cvrJwDE#WWoA~&p%0@AAUl9gYj0WcN^$OPFeJyjVzQ-JkMWHV0{ns z9gZ{UEAGQjsNRQz`{RNKkH>tQ^KpUwJls3wn2S#Ut|wPd+lcYjGQ&Qz1@lD3KZnC^ zlJC*^-?-UtR>5zCWU*9loU1G@v;W=$etnlxNQn>ei1YokdI84c9!}S3ukA+v;q629 z9u57k*momt+c~~Dh0EHpy5;K0z9W#zA7a1K1wVPE(6JHvGcGH%VI8wK^PR&-op>zG z&%uXzI-50X+m0>hKU7~o{O+*BpIUaTZXQhWa0}bTh;IwCOJqkW>>&PQF<+lF#JUIZ zA?MM;o2%eY)@SGBZuVndNpdhB=k+80pspQ>uLkXSZq=2Qn0H$i4CzL_n#2u5W|k}g z{>c}~!#q;Be8}3XQ2(r(hrBl)^ol*>VUKo^U06pb) zpUgARrsOZyz2ITQYsJqe=Vmr?Izwn^jAe_&&*`HyYiStuHME0Y- zE!2*afd6YlZz&L9C$$Iqb0+asqMjemIgpR@ZWX;gwl8CD(Gghp)pP$Oz6|iKDJq_T z`7_Ta{$nxD?kakJIp}+Fg8i5$b2{SB)ZvqCKiP-&Qu^Iw9o_4bAKA50*Z)Y4O}7s~ zcm;Ly4oxoE1sr&PA{^k4%D%=ljR<#=S7hK1e=pjM^{$=sYb+#pi*Efuc2CjStI?6% za@ako_@(QyZcdrk%q?D0brkfrR($szpKg7bTRgE0e$H{z1!#@^t;MboFUvyIi?0K%D>nM!#z5W@O6qr?pc(c1&Sw{n zxUvU>a0b;oi1xi|${Orbh8W4kd{(%A#Qk@{FO+t`ehs^0#0BGk7jLiEMjT&&{>1H> zJ$K49_&IB>nszqk?Uu@s{&T=@TR!rkA$I5^JJ!RFog?2k8}-N}JA($})c4AMx)A&V z@l~Q7NH5|in=xtJr|8G*xsg8(9|<|1jC^iB{E+)U;ehdi+eiG^59PRMhEluC(6yVE zPyS2iV3M61&>q^gWK`WtSkGIv^p!KZbFpvA=P%@cEs#gJ`QayRqdxvU#vNX+@oD$d zMjeIuYt4Yyujh^0^#hEPe7>g1(e9)d>kTEoSHbSLM=koZ3u&syX5b`^-uBpJU41mZ z{_b-}zbm4>c|8bE%r7(6jXq~}jjmr3Zce00Un6k%!RU>@=3wcRgk4z`h}*nvxt+xx>YF>1v`r_RRc#81oOM-fo@V@0NV~OpJ#dH;wUIvzC>k z{|UtB2OrfFNe9sh+cR@+gh@s*XZ^e7NMCE}M>yaPYwY$R808czsAO`k5jB zI$b;Z$Nc_P^w*SeeD92>UPb)p^|{?upM!ZJZx^y-Am>BhGAlO-yg1*_#++W_LVu?E z&4wLhH*k?i9_AO^UgE<(8c(NtpmxRnH*1+b=}noHrXx$qKWFUO7oy(0e$*~OtS{@v z-h%n6D}_EXcKn|*A%EPs(9d!V=11QVR7bHE99IU4mzto>k`j2s?nKr~>q4W{Vqq;a=N$e>};=}x%wUz$t zkHA@MnNqsxc+{KhJ5pEw1(P?PunzK1p0fUd<8|W-@vqa-X$r_r_=Q+|*qwNv(4DqE z8a>JJ=;RU~_6x+j<}CTMpY74e`2D2Adj6Gz`2o*}Kiqx9n@1jtxJB~NFF4*BU0t=^ z51e`a6Nmj9^{%(RcG#K~826O-mHKn=35TO}^&`31r_#i+72_=hF7#j0i*eoJ9sm5V zFdiuLAk332TgGR9ALAhJx2KP<{WkP)JT4tya%-io|Gzwb_ls!1l=&W47=Iu>^jBVg z!VBxqjAS~p%dgvy(aNbF`oA}%@Oo+Ghw6UkgyTQ8>)vCNKCHXb_Lr9?ojVHt z#E1{`th9EKpUgu)icY-4>B4-F_^`iYt(f@gCd3PcAN@>PF!9tD{l$T0!y)R5wDc<-Z$Q_^&fEb-ZN?e)>bQ?S18T~|@P zfIIIGTtNJR_|eaJHra*uS?p+b`8xoO+gH!dieg;l_>f$@f8uG9b2OLI`|tyn2YXyr zl8g0hZ$Up#BoFIj{C%VE%toANZ?H2kpH02~k6rQs{4S+mXp|+wZp8cE_FpdyorC_% zMNvJlf5y`q-!;PZf5i7Ac>Tz)jn13>i_nAje7iV5*}X{@PaYJe)sNSN;yzBSnFqNX z*Se|)-@tgz`6rjH!aAh?@s{*pKB$vCu*ZnFYgaid9T>5Wiu7T9tjkG!96!B!pVvU{ zW#aZLZ3g*?+^H$z%SSfhelX{!691S~v1xNgO1IpBxSY~YNX~?`T#TJAeXt*VyubEA zsuYpDsd)Owv|oP5qkG?+%-1d5^n9JJU*1q%8-ib0##JAS_tN#2Q>IOO*rSUFB-g1E zLh)+8u3T5t=i{HG*04v;Og2tcz3lk~6+%^?g#EoT*FiwO)*U$(}4<^~b+OT(wZW z=AoSU=IiJPzlFNE`Uk7{B;GR!I+BD(;$MKAPp#Ku{aKn&MhW7_x`5+EdgS25YU$fE>M=PCWvrd$d;t6U?1_x&w`2X4vVJA~ z%^DN#BnNRYZT*DI4bNbF;&RB&bvpiZkA!0#>a{5IpV-gcBNjMTjcU{3Lw3M^&fb_A zS~LUgO!C(w_s567IUD0Mx9gP5?KjN^|7DqH#^$qKoG+i?@E!VG+QopEy9p9h18T*pmX~!SZi*+XJ zo?iEcjQ+UOwg>a1(j4N$zDi2G(c~xJpP#uN>-VNi!gGlZFOBYpwwaiBbY{Du)Wx-rCy}J3B=>F zE_93rZv9;(2m49fulu8~cb#-J-qR}k+I0rRk7Z4N5Azor*@68nwm-{nAEL8^a9wKP z9|oclvdB*`UlOj*dSR9w@hkZ%pYt#5AEHb4a}CXY^+g-{E6Kt4Z3N=OdlP|hz`Utn z9A-}W-Nuau`xGP(`>84XOS3I9-iL9&{!R9^KgK+Y_wQtLFUjt}_to}tdXkHAi2HrR z5r4Z3`#&jqG&%2Ncei4kP`*#MNXx{X`0&0=%E%dCSc&>h&Ux#^qcJ{Yxx(mIsqv^O z=f*jOx^^SJW6@uC=B&ehb*WCW`glc7@I}Z?$=5Q7AN#(%9$G%};rk!Fz866mlHq6>y-XOxM4mn{U^t=6YE5-w;k@QM=zjvqf&Yk&xo2K_H1ufK1GyKMf52AA0yJ_^#7Hq!<`!<4Y`iciVSbvh9&8P?QVZTcwV@>uDzMo#h{fzjI?ZYp- z?PpXX&SqU;f2axlU0L5O<~oc+1=M zL;FvP!N>7*6mA*|zvbme7jF9z<~3IO9vo$EEZpY9I#@Wd@H`20*(4ACY^8d-Vb>Xj zi$`Og!s8S1K`(n|`p>tupq&W+^}6}7R)t#%uebsAvpI*%fWEz1BzFt;*@>Tn1mX`1 z&qcoqS+)EPrD9GdKd4FdRW)=ht8G_&}zM!{Shd!`xq0Y}H486Dk?@yHW zTL!+Sp&h%C=6I9bBAvW+k7Os}9_M>{^6`O<&_ngY{;}|JMcW^+KOmAlh^v_;)8;+u z1}-GO7(%HXj_<>dNj~PE!V^Q!$M~{8Wjso@>$=%Z=iz;)_|ed3o9t*8($hOTXKdZ1 z!`#?k=WJwGJN$z5;CuA~@!`E8FW*x12=-?})|-m_Q!8}sb7|3;*hj7BE{N>~h*D*I? z{;ue);kmsJ^Jo9xP~ai_rs&BkyKenQcHsM@63N5+Th2i3u?g)%d>AhjKCBzL{s*T0 z=R}Wgo_134^>3hEvZ&tkfg|An969|jCY|#M;t7}ET--Ga{gC6v3*ryoEdI$>yG}mg zfOW2w?8p09j;9eHelMWlP>aG(i;u_q-JZ1cBoFb3+d+C^r%*lYkB{Izkg#Fcuv)~G zWHmfpH2l`Zcn{9~{sqUS654^?JM014hY@}|Otz1Q|Izowt8q`hs9xBQ7gi0Q2qX7r zwhez4^ROa+{U7$ph_{Bq=uG>_+?A-O#;)MD4t_)S z<2|nQ#E6qmMLf2iIopH%;9Vlw5BwyOvk`nGw*qo69(nD(Ij9%mf%kzac4-O-2kfgW z{_RJ+u#cMl#2i+m*oF6pyj?YVl8^6~GV&A53wS&xzuyR=ict?>pQ4B7Up8lGE9R*h zyCN5Qlz4j#&t+`$sBb-i_>$1>Gjw=sq!X*|jH3N``)c{xop3;ZPO)1nzjD<0W{ii~ zWbYB)(LVgTee_|!#P@K7=SQ!;*N*si+SH3KY}ECuPw?00 z@qH+Z#*kg|I^LVPY{ZB68Y1yw{gXlcs1fZ<`se8M&ntQK!uhbjzU1D^@%>Cq3?qKT zi45Y0Us$MLAYMwok|R8r|6~y^n8$P6X&$?rb2IkItWX`+KT2HkAfMzQKJs=XJC4-Z zp<_*Wys6~px4LxW7TJaU7fBq`h~M2baoQ(K{&OYfrHWnf2i{)$OD0@|@sQg|cH#T0 zJUwoVHN%DYMfMz}vxoTL_hR*!{2a^^Z4}QuIzL-JMqWHihZi>_{&4!3OYy#!@pU=b zjefxOes@fHBjTTJ`;6HaVV=Wr(d1BjHKAR|uA>d&$%A8_`VRV?M$Ye~2k)DB{k4MU z$2|TYL^FZvg?^k#{h>uG#GSs^Ycr@1@!@-3f@SOt_&!ff7Pa#V(2pAXaxUx_$i9WF zlvR%{Z{tA#7^j>!?EjsjyuN(S<3bP*iRR@ z(9UEB-e0EFOFsObH}L%?<$KBH;GlMD(bZ#2#n0{lzDj>zqHAAw`NIF8-=xSRd@ygY zkX_ZFf2L|0e*fy?{p-4M*R8_uhXm4#`3&d3cUsG(UMStO2>QhjO5eoa_citxtSgk?>#YQrKz3n1$J?9Q7vmepnfw#;ca4pGc-ZR0@V!T_ zUn{uJIrRyw7lc{k??1s6#|!%et*8efj_q(&mYg+FGJ z|6xAO>uH~G0{UG@eBL$ZYV=#4pDZsqP4zeqnH#4a_&(xRaxqUIKH<9GV7$m8{PBG$ zE}#1ODp1u-AOEC``@9J!KZpABICbfSH(T-knd6`dq#$QfH_1UOvCu*1VI=Q45?>V_W6hGb2uU+FN{%JGzk+Zb) zLo?+wv46tHaV=lFA3yQe|3`vEUHCrSUK`U#t&#n(B4D&Q48^c{dR-5ik)j5ik)j5ik)j5ik)j5ik)j5ik)j5ik)j z5ik)j5ik)j5ik)j5ik)j5ik)j5ik)j5ik)j5%?cQV3ac!2|NA1W@kta`>UK)Wfj$B z<<6z`wa#LtDAMK*%T9mLF znZ;Sh=nCU%wzwOY)t5CaTiW0pky_dkZmeArw?nmVY$}n*UDFAR10J8-DL4%XR2_26 zv#j38>gHA>COJ^k9Q1onj0L04(Yyu;$gPpLMUAYMBaOAIoC%fndE`Juju85-9ieiU zksWd%(GHD=bUK>d5!q?ycEr&$Xt!3sq3ocsY}n%oZx2PwowK>@ggS1URoz%U!{PS@ zV%r?iwy^B>Iyz$hsL$z+MT5@TtzPHI)Fz39YkXT|=i#~%Z_wimxjpUfR=^PO#KM5X z5sUi#5oadB0v{WvBll~yCkx#nN1)Z^EHWyeq{~du0mfLQ*-_r;a=3b15Nc2m3J14s zceu)Cl$Fm+(}HV{a~`G>9S1zt?p$8mxT3D1VgBMeLzhM4FIj2S1mU1jZZPZ|rl^5c ziT!f8mJO5TK&vkRyvosERcB1-tAN|@j`{*|2T{v9d>yipM#KPvinRw5DyHv638=PG zd-TGYXmYJP97+(Lz)H9WLs6Fz;4Qw!MN5qeyfQ_AG@)UBg0grMMcWc;V!$c~8t1Q# z_smik&So^+c)hFXTtDJ#^*AaN z7fz0>vLC$BjzqxY82CFAFvxbwQI9jy4weF)qHP_9u>!es52{l2s~VPWFhVZmcFr8E z#DzWt3d442??`C}U)0DG0ID@U0)87BI1=uR2MD!SN9AybFVGTn#+-Rdt9s=YH{!7o?9Ism zA>v8YrH=F%>6X^dk9$UMe=zDek;a9qoK=Hu%H=*Zq&jw~m58*$$CCZIEtXIRYN1fH zalz_@+_--uS{cMJL|A=rwkmTStFsdwS5KWBl-eWB?pbNuFXojy%hQ&IJYl&!?a+!2 zR^g~fP#&)UrbT*F<1;O44m0rooQVRqi2N?hHbJ_oe{=|63y|{2ya*f z=h#s``1W7uj=GIHPBh%OX7%93DHD%m@7dzUG?7}`3Dz10Wc#9$k>DxS4>Flk_WDOG~C7y4OkZ514vmw?{ z*WwGyTit$tMVU9HYXywse7jL)BL2pPrN$v=TY|$V0jf>*hgvX}MG{7^?%;+> zC3>vIMA4~Y04IzfG#Wvc*iF>wA_X)oSz-}6904@?@sG?ja1_Mz`D=^{YNp7b2N+7vwp>a#o3}5lJpbKj}8mP8z-Rg7=c63O)NC3nXi{jHCgP?~|FWtN; z7{Yoh;xBJ3Hwt~|@do0ea@sJzBNFwNJLe3xYD%P1rh4hzLLGYyoDeJDMXQaRyd^PO z8FYh)KOu4)++1#vClED^8cD-+JX*wQH3pB26FlwQ# zhQkOZW{cMtkztU86qe%&ok5$=pfa>;fgKEaWk(0zK$egB@)YH`VWv#U~82jG#vpsH-)y0{vWXg@JRx z)ASS>&TtTWq!V-vlF+l@+3rXr<_;Kc{4@s|m##Fj1N)eIEqVy!F?NbhBcJWG$C`Z} zhf3jahdph+&cxL~f^CBy(R(MO292#QSJh=mBoqw#2R~z2y2{xQ^t59*)ekB>K!==_ zgY^nX)K8KUs*k3LcPE2p#$c;&fILO9FW~WGMQqey$ko%Uo4F}rt!`T=7)E`Jd=h;V zdwu!5hP3pK2Q`v|y)I>`fmyu4fPu~b;YrJ)fE?W#47VFm2b$xkq!<{V$Jb-i-N?pp zta0^Pqv|7M>8r1wKq&h)1}0-dFrQa8A^7*Rd#Eg^7sfiklhC-l7ob*sPo3M_6YHQG zEPFT24NUGZoM^PsgpMW-Zf}PXXb3j*SA&G!KSjcxlz52U3w{5lxP@u%pgX5B-Bx<2 zVdsgYt#Z4(U3n8>xL61T5|+L3;Db#w<<*e72^W!-7bMOj52`uiJzgKWJz=~mA>TCU znDAY_rx{QHW<7;|%}dxO46W+e1Gio~zpOpzn`Jm>#-N~gXl3cI2Edg5v%sjk?PxQO zXTCJvQoG!kzSWuGjL?30vb$hPV}L`aF98R26E?--T0h1oV|^V)mBFTex;ItYK&SV= zxWiyUpJFvOs15oUUSR0?dGL4ZVqqA2<6)mCDtnFUjsB!>f3@QgYzEqZk-;0KW;y;w zDPM`Hw4C;P-JygUMBU913{>h)VG62ie6rDmbY_~)ggue1amP#%6$|)0LA;qxc+sdu zEM?-ZuNQf^Iu$fT(Qxo+@f~EeQ6h1|=Ds$Uqu1JXYio5c&RenM#U@e08blwl-O*^c z+_>pG6IwZW3|BXy^%%r`4nZ_q4Z3L>A6q+vj&p89ml>6K|-BN$F0@rLN&CQtERVqhC)owchC+bz<#t}bE0st?24 z-5q|1ClqouRws1$gs98sXNDWQywo6I;Cog2b~B(rm(Wuf>~yG$W<8OC7&Kr%6o_d3 zQ6%n)8fd}BPCqj6Hm*O4#At4y16!<<*KNR>f zgr35ndDVRcJ&}R2*v9UM0$r*BgG9*>}qwgIpUpe{)eIPnds_Hc7myszsrLjD-OI2DP%8#gG3 z;_GMnE}WoPk!jFAi2Hayp~p79Z60imPaITDG-*|65<_%)i}l;j2}VK{UWd*A z7!<4ljyL9s(wk286-zkOp__vGun|YdCCpg0rik+<1U()YwZeww*k{+XCm0jKdL$td zYqF^zeFI}_J`fFWPiTo=%|@jOT3f?%$ary}l%xgU>uYK0!!`RU2Jlf|IOM6s7Y_*f z)<7)O8lS$S%&F{Ng=2U(4#3m;SZk=YBK`idQYvqAcZBE_ySn$M&L|QAAR(MA{!-RK zue{@JukxrC8m^)gMS3GS{HO}Ptm&VDuN!G!A10sT-%fN=iaI1MU$kX3)t~Y^+@5fd z>aVWXwQQOtC9I*THlTN?-)C?%tZk@Eoc3sbluV@eL>S?Zg&g>DatPms1YY_=eSHEE zyp_@iJAEOL=#a~`b(m%`No)y*JK|QQWV>mrS^J)>ZflW1;Jj{ssLdUp9jaejO_f6= za%WYXN`3K=ma2L{!ZfPBg;mdt3p*mAofC}@dE8Z+IJH})+ScLaIH>OgQc1!cot6H$ zx;|)TG!KAAlasD?&{Y+cw`gSPa97DRDmCaE8eSD008w?DM$||3sx_KEw9Vv#`Y?QE zTR;=lhq{^l(L~$)!9X1GG>zLT2ff<*Mh)jF82Kt^X&#b}Vn)9dRsB*_bBZ*k`rMTj z{h8|Ko|?wgj_O(MaYWKl_(GAsy|e=qTu+)-RB2?bh5DolYw)J&sH&`RHJ6sgCx~t! zG+bXFR`stf5TpnhM=FgZY%)fDv5v|CQN@3g5dZo?iW`PPcne5BT5zUQhLO9%yIm8L z#)}|^x1IXF(MVJE3?If?AHJZks!Y?N6=8nODf=P{X~DQJooK!R>6}$j?dsRCSyh}U zjbFj~#9F4O8<1sTU&PbN!A;Y>B9*f>+taiVQEZD>ulJo}!nhmJ{7#)jr?g?=l z1e%+qGqY`mHn68NGX($dyA>it!U0L+wsE4)0f_3HH4viNaiYHTbsL6ItXjWj zReWE`VA`BY8i{VlM7vFvqYlOJh*Nd)KA5o|8N;`>4d~FT6wLzok-V;`CaTXQA#5@l{F4-GS-1`W7c5V1U2d}hV)_#h}5lH zJ&}Pmc)8UN1-|Um4+XxN*AE50xX=#;e(<8FFo2f6QmH2~s7y!V7Mg(&dPCWd5PYGt zKZ<_aM}4WI7o%T_C3qOx)f?Puyzdk*GpH$kg{qgXe}6$Q5AeSd%VJux`-83FU=(Xb zbP@G8QaiSXLb`9DC`t8Q2aOs^QVUV~exYALDn$RoKO;7)W+GrB@WmsrI@Gb0v<{^Y z{B?mLbXTqe2Y#nLn)k0A0yV7p{JO7Qtq*;Li`d_G>i^E-|g(ipPl?))IV6& z=ds6E;O~B!mx;hv3IP{;;Kc=BDU1KNjXjBNo3cswcMAWvYiridM8HJgtAxOX?DRnU zSIJ=0)-N>z*R$vckuSA{iN@W-o_YIZb6uSXikUJIFcBCK0uM2H)#(GG{CW^gV(b6n z_T$}3~IfcHJrcEAm7X~5ik)j5ik)j5ik)j5ik)j5ik)j5ik)j z5ik)j5%|g=Fho0+%HhSyk&c#_-=EQrgLPzo7Jl5+>hUy2%Cqr=zjff5Hm$nAO+Wt& z;O~lc%9A5)Q*z>eQvrWbtvrj4#&O^e5&0$tqiu2+r^9smy!Z5=f)93=cfhrCdExuYFr3eQ&tdecx70TTfe0TTfe0TTfe0TTfe0TTfe z0TTfe0TTfe0TTfe0TTfe0TTfe0TTfe0TTfe0TTfe0TTfe0Sy7|{J$e91LyzE)e6{w z14R-~m=7ibCITh`14iH-ws+>Duh8$u?-%Esv~9q(`}z`YWx2;yeu=Apu{iDV@aN!n z1?=r5eGP|O#BrhEml&6?nrYtU#z|?w*-n7GwSkb{xSzE*Z$_oNL%~ z*Bmhj`^tr@&p+;S=;!^J@Sa#ZeRqFEy7C_jb8a5YIcL|fvwwKBj(?z!C$raHs2TwA zX0|Brh(n0mz3ix*c>~aElJt$h3bAgwr*D!kv~)Oopz&bNtv*ynUMWtwB>X>oKH#_6 zW&cvv+;PCNgxuNd1_0iLVpsQ<;au;X;)l(l0oeOxAz8(wqbGe?j5!2$JT5HE-o#vo zK+?cOTq0cbxOvWYFIFY&cN=Yk7)R%^H=Y~Q%YM*LqHy!HHQ;`Z?Y?;t?)!x+H*I1y zTwaEB;F#TmuuEekzR%;lreBC3ee?4?_wE|;bZ^+8AN*82;=-^F7pAfDL5m+Mp8LTj_Sr|&CE|pK-GkPC=oy|7@4eROJfuUf z>5G+ktoWms^yk8UC|v*dO{~6OBPNPRyt9ezN}-#Rmc$bE#(bR5jzL8=zd{lg~K#Vy++Kfi~w#LPt} zetzOpB)i4yZuF<*etk053$NxK_dmQ|O>W88#anJX?I7lv$#TrJihz$DdD3JP3=;tp z0TTfe0TTfe0TTfe0TTfe0TTfe0TTfe0TY2QBLaCi+pojj>hn0f?x;J{?RGbMePK(W zH5ARJ4~JLol>NDM7GS8=A&0}kaJD<<#bJANC?K5-=m~Z-BHywD&z6uUEYrb({+PR} zu`-)(l?r8EySyFe|KUhK;wJT>D;vB<#9EunSMzqrr?NpnFwGDMz#$m}B z4tFTz_qhWe+2M&rqQQ=$6bf&rH#M^*8p;Kl-k2vkXSwVS*|mhmZjX@3@lzTd3)d|y zOvqTVbmh{-ocdL(mRr2OmKF&vQjm0lqb;=6tF(L3c6TINK`q$sZk0RS0eprtwpWBY zB5k%1WW`>1WW`>1WW`>1WW`>1WW`>1WW`>1WW`>1WW`>1WW`>1WW`>1WW`> z1WW|JBnW8d|0%zf#QA@{*MS2{UT=o^WFlZ9U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5 zU?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5 zU?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5U?N~5 zU?N~5U?N~5U?N~5U?N~5U?N~5U?N~5aF7US=l@+mhyCIFzw`N_e+Ld+H?Du7tA{-C zha9$#{Ztt7k;J+MhcI` Um;N9^)0}vyr)0c>Pg{HF13!oh<&o1N`CwcE&ldC*}H) z?UD~9R-chAe)z7$dQ$kWl6HRzKB;5KcV_3X{p=~r&^Z#@D;+oH{iCL^QWliXn=P^Z zyk44umq%RxN8rQre^4^5e!NzQ`{K;|&xF0!6D>WzmDnzc>~}$4f0t0W;rMBxf3=XV|x2Y18RD zt>nBnOLb`j7A1@L^6^A^Cdcpgbi@Yv#6QL$KV4Q)#w~XMFUykA<36-AyC7TTVRIc!S!Y)2+K2Q{0Ttbc za%#rz$Y?zp@~t0>?_P`gi+|3Dgn?Juey(Fx9zT#)qd&VKLcL}T@lVZRd)dW8=K|O- zX!(2dUkAS3*(VNv_qH6?#QP)JQ-pXk*y|5@7gr%pP{>j)!p(`Nd)X!@^u%)y{`z<2WT9l|u;k1Eq;F(ZweUwydFR-knJ$cDhug1q z+jRa?D&ATH=MziV)vpUWJkFF3KMVfB?JO;Pc|(q_ToX+8P16#%3)VMw03YtpT2XV+ z`ulTO7jK_M1$(B#KXOQ~3-(OP|2FJ!rNvc~)8GAj`7_@{y|Xj3j{Z6B8GA5rU!qrkEX;~w|xei@PoJS7)8Mgz~0V>WG`1b^)BdTrF`m+Tm~ zXA5h73_s>LYJ6n>2rYs8m7`vmWk(!Iz9!~Qe-Hhe$H5Or`|U#v+BKQ)^G-)HFT4`{ z!+N#-)fa7tApRuV`(nw?>gY;OqP>V+=20GFQ?bakIBCl z?NZPE_i6jR_u0^1)Gi}6BHT~4cDKUMmGN}CE`Okp6?va-fPZE^JNm{sg$DK6I%eHR zWd`{Jl|N8As@EtG4=JhrWik41Bl`&R&Kl0XIe$Yt`Ul5@7bHD2Wm$G2Uh+8oR04V1*d|A?_eo^~PrznQfq1b@pUIoSsDtb6RkKeQRdiDZSFvh%m0zI@yz zdFTgXP053{;e+tEm+c$2WrO}e-lJG=*i-z2hRiN zsX!ct>n2?pd1q82&SovQzKHpQ-9k7Q!yaeOZqVCp59Iu$7<{%5MlNf&qko(zY#Ix{ zRo3-mAV1Hx?MG+_tH37wl{)kN!Zsi55YEUyPXb+vKd!Yc9*ubl_XpyG9`=iD8`eL2 zd40)_;X3=jopZ$vu+w%`=FOOA@8Nh?W;w7A(9Pw&W<3}EDr9kvwO{FiA75Hv-2*#v z_Ti+St#XmvTs-};@PdaCua$UKYG7BK ze9$+NUj(kJvwu|tT=kF`%K9kte2g#qd3z8Z`fVb@Z9MGDWVaLuxGx*|Y?B@R@#Il8 z=i3eDCEeB|uapGU0|%iyn;`*UBq9{nusyemN%62HjmngzX?59eL~ z25?T{n>FeuTkY^Svb$V|Te6(pL;crbz0d2DTt3Qr{Cva<9)~86oYaMV5e1*al8Ft{ z*Rf%>=+BJ!DzUGSd{v8c8&MDL4_f(d;Q`u*5q@4G+s6ar`R^O6?I2av!S;VDV5B+`U$0Ftt!lZGFZmNKu zHO?5cJBiiuae1_e`Lj-c7ygMKbiuM^XT3EPax(8I%w36ka{KCX{McV9wQU^r z&=5QHY1ePF-#8of;Qfy5uf%vkc2+>o?ZwyLn`5w#s_|?0hiuQmKbq3ouhD6Dl3xk= z)E}nk@X*T7&w2p+6g?^OzL8n?652H(ZdGVZxL;WCttSv)c)Ne!@-g;bFqEXZS__WC z{I!PDry=9nzsukC1K^!KB!7G}@JtyeHNw9PKOqME#jD3I`m>AmXxVJ$m~D?uHt?^- z|Iglaz(-MZ@x8nBLN@eHs2(NcdZ8u|dJDY?VQ+6Q1k$)mXwnhI_K6iMVgc+TU_(R{ zMC@2m5k(QfhVa=?RKEW^*kyCKmj+lq=lq%7nR)NcoBzCd^JaE;NJ#z+dMo{)Fr2>G zYWPl%{*KrVnf}g(>vv(^QO41?DHC=nV97+PYgCgFTX~g!a?$+c_p$%KTJa~76Ayfd z_*t16FVT9hPpIe1Qo2QR{?Z% zdHZKwpB2G1aHzxnF3gaV8uW3zMUyJ!r@jLTUbFp7H zMHa*LZ5|zC(wHY@g87NH5`mwBr<^Ze-;96fQ`lFSJ$#dVGv-Y$qTTtD%2gOaH`|D~&?JlJE~}k{O{b$=D&Ok!Sd6C+43}OFyp(<>elw`= zsXcZBzdueT;u)DChENv2n29OQT+dJ*+T1S!d(J zus>Z{%zrP~oOMF(<{^}UR>b|I7 z|7e55^D&<)@K!SbnZTjS{#vd_zM5ly zN4s;Pzo<282=q+o++ajY#63#=G#_1{r4KP0_)D)2 z`*%l*-5sUsr|q>5=fOV0aK5t1#1n|e!tz5^npuDPAJ`XB>>#u}G)=fzfy-6NpJN@h zUg?Kn+^3V!?la_xYp@T0RI!JZ(Yt;}zeHWp{D}+`x1Z~hv>Eg0wlIH9&(Glp&&WA_ zcf4LL3Rd)oqaMnJT`9N`&KH1&_~KOKI6Y?m1kB@=`h&2FSO!CYA;1t|2rvW~0t^9$ z07HNwzz|>vFa#I^|9=QXXGo=DM%|3EfIlNJRq#t0g+dYiZ_nV>nfU>ksvzH!5ttJw z3rPMzXK#isBOxdvFkLFhNI7*oCmYzY7fGeF ziv80w;)D6Ky?GhY8B||PhQGMD6p4U;CJO2AtXZ>=E-fsI&AWNu_#chgOvsE z3B6Nvr_elAcIw_+ES3Xxs#H*tQ9HK&uWhklTBL7P(hb z2+Tl3QLmJnH7Y_u@BR@AvioROJ69_g!$6~2sUWxC2u<>$j7H)3NJW_gar}I=sz?9$B=Om3Wg4dPykEOGPyu*PM=5x zky<`-OazY6<0BM|(Ht96sU~@8ZXa#(GA$eMX^v}OzLscTes13ZnnL`V-&K?Cc_smPHqNa)%Dn(xb>5(3)b9ovS^s6=|Ad zk>@w263wAiqNzzqL2k}qEzu>KHe6Dg+e_04q98}p zhW(lr;V;wb41Zbfh|yYhi-OTvou?P)yEI2^K+`w^nhg#VQP6O+lO^i%nTaG_ML5i4F=E6#Q~avipG zT12N8uM~4 zV=@9BEF4d@jqc8@s`EgP9RO?%P-}x^>Hw7%!X>C*$bX#DJPmF`{$IDn#q`|0Tw<)_p3&K5^!^XVZT zmfh?0iaV^Jx8N^19T0_=6$pXA>3}G_@YKG_sfI-=&4H?s1Z3v}^HOZg$onIw+I6}e zeP)*w`%5K%B)$7$VMrrJ|$(lFHq2w!`Nh~YM7mKl9 z6`?7!1b*t6gD`YjkOTLG?RgBsSgPd#kOe zP*z%;;jS*4L9X7jywz`FkTYm&Sv9IO$eLYNh!LOBt!5HVnQZ3SFb~PLXPlLQk^QqW zy4Fa8zG6{nK@D*aj-OsNtCpN*c5$FzL9r*JXU#QugMS&np<#K)lBCzBeG__ zl{0MQfN?c6)YHC49a<=pJ56}$9w8uQBn877Oe}%G)bcwJa-4y(xq(uzIiqC|_Hw)Q zVjyF1@7y7MMvlzthuuF73Pk3WQAm|hNX3;>RH_F;_)7FZL|+L70{luS5bsw)f$+Z) z3akbyqo`C5EYmBIfptSA6bM=?qnKG41(u_poJ& zf^t*&oj8@Li$aOz^q|NKhQ}FcYL!%!r;076auK#N!cbFD-qh045=*+-7I9$FBQ^8s z=4IOJnm<$0UOCW+EhjW5%tF26ggP|wb2r?RDT zW>6%S`LVQ44|ZlbBQHk=W11=XON%2fBTpBr?Ilz~306&}$o3X2jriVyeE#1hM1i;c zmnoDdPr8)*bAOY_EitLT&#P(;Ex1BkNmYq8=!k!YM!uXydfDVe1y_>eub{lTMIs<}LP*UR04$Z7V zn&kAU0beK!wW}L4NnYR3!gG)&x&6+8oJb-_e*Z{?$dBQMxYXy2RzO;=i1^g!gHk;M z%28CDAb$0^o)uGvmr{KLkxg>wJetaW)Q{aOBSJaJQ=bD9%0l%H3eBuSn&j5xT**+; zRR3UPcIM`MvqV)$^65N9`A6;TAtzK<;#;apSNE3cp>q#Ok0I4%t^qyOr#{awk_ggg zC<>|FJtGlSBcJM}^Y+g6M|usbfe@;n&cmzjkJ_JE4JOhrrviG?gU&JgtAC{Da413g zRONhS!XZngbbD^?H?vjg>fRFnoC=soFZDTJr0)m~dXh6&Bfq*?ZMbKqm4b=nT~q~T z(vQyFBEGT;=t=L9r{&JmpdcXTg8IS*d;Fs!<8GhtA{qtA09e!_So-!l9uY@o62(VdeUlT?~3^S4HQG z5WjLr2Iz_J%-)zrg%Pqy4z|_K*^lH!Ye=Jh9j}pJ)hv=5Q&r*`(2@Mu8t_%dLhYWQ zBBFZ24nQe#T`6{CND?M!Id{wTJOM1}xsDGCq=|lf+ z%HQordeOgw@^}4_ekp%f`Ebaiiu zzkL;$s9tXcbR?%k1?AN(B6%HEOjN(5O4sz3js^ZlcG=$wDj zC+~b$2KiK9Mm6doy{1-!J`yR_t2$LL5?QtLNx%Fma8dnqp6FlwBRwpCwGym;h5$o= zA;1t|2rvW~0t^9$07HNwzz|>vFa-XY2t++Ht)&>Xp8h;ae>Tvcjr3;|{dtW3JWhX} zpg&L2pQrHWpV?TZHA8?Qzz|>vFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoWfFZyTU;FSdzSq4r?(J^sbBU^o=Y9IU>#Fiy*gdfc zTj|`BNWVPp#cuT7__zAoxj*B(C|Qp+G0!xs=zFm*V;V23%J)CAyzX&tcR!!!mMo3A zrq^HbQqAz_X?b*xPgQ>(=^xvAHs8-xwVrcL*CTeqB}L~@=&vy=eo&up`Ack%{&XJE z<1ty!RrGz}jZwet?t2dPsHv!uxUml`swr~?d|SBBJ%6X~`5%id&8p~pCAlf1^t)%b zK_VmihP;}b4<^g`w_b13|HpMU-yv5Qx2Cc8eOXXlCKdgX*iNZ_ReH3p^&fQ3Ag|w_ zo2JUI>~>0Q+Yu#|5!Iml`k1-(w7$3YM7R7*>m0KhRB=vNEc)EX%AH%Kdvqh6uh27Q zoA-R28&H|jsk%+0YjS>Os9dk%w`**nnX2^7x|_E&Ql-!J?Tpx4FPNbrG+X!j?7GO` z6Z_&7TIaPrWyt)=t-<$=;hx9o+|={+JE=QX*5Z5#{|n_F(Oq~{eU4yds&tO&{fPSf zjo+f?L=Vhl#pjQZ^eowHiipN%^)0Lwz^4LC&t}>ibj2ZcGfN2-F*_yL8Y^~P13pC zK3N=h=dD3gH6Vb7+)#N;+NcGLq#eCBsQeg%8wW6*()g}k`dDAb(OinnPb9hRlvI?`I%*Wj22ei(4 zyHsE6VLBh`iRk~_t98CrMZT!AOJdNo!@qto*zq(3(5Z$#5QP`6{~ZBkJ>GcgCiysmgii zyQ0&2X`Q2-8~0+#!tDDt)eR?=`&L+*N_l5m7f>*{g!`sus1>_rJVlRf+$` zbYDj$Tr>#!jp2^m6;lH}CH<2LZNc}7-hXq)8t}ht_~8C7HQ-B%8UHAqv=<+PE$J;+|>HnJ*$7cr?`W_ue8o6JUTk-h3-8+ezo3h<1gSRweLObmX$+l^|<@^ zo%yQ{E#e>iKCxux!7rZ`#=r7fm%Dat;G=hz^}2oSZ%>RqddZ77Ec|65-{x4_hu?p8 zsNMF=FR$v7Oe67T5q#q?iZ`QWYln@#02hU^HGCS97j>h-1{k4)~I#vdx0 z==t*HCOb#(`ylZ3V;#ow(-!1@e!Hi`#xH~`%hK%J6yD#-;f3CU5&dvAp6Wxy6 zk53=}>O#l<@lw8 zTi@X)?p|nlVcXKjeqVn@)=xVwTEIWP_x;5SO+{rJOAUKVOtB02H})QOEN?t4YX9Qr zXBO>fUc#?5%v+KZKVVJ4bHjYo{yT0ZA9HfzrZqW5A4p?|EWB>9X)XU~Ki>A>y^n6K zwRiR%?Y`VHn*Z^~w=!oM_W!Ux=c;!%tt`vq@2am%p)jc2c znKM_`DqcQ4Hf_l&UG`M*J-*wZA@C&qdjl^`Hx}kHvMwb{fnPAte<9onty!N_xXqK zyC`t^<8ubTs(<=zzR5kK-gw~a$v>xe6KY56_J7OI{b40hi-av z*iQb(jYm2h>}&oY{lHL9o0841@#zV-b-eRf%ab$TdSvT@IXiFXe=>d6*m7lCovX>O zqh9X(``!E{bMO9sL*iR4zZmw%m)G6$O?SRQz1g?kcBuE=!?!qk8OPuDCO>*@->J`z ze16Y;o0k>~pACrRzrHMre`)6SCO5XN{o(Jfha~>$>#rL;{=3zq-(7Rh@}IiD{~llX zOrQOGr@9NfW_{Ua=jO%#<=@piU)ld-mVWkcBc!>>&93D87Jhv^^{a=)#qR&UK5%Zo zJbu~84F@h?*Yd-zdsY~Jc=-g!FS%&ql$bkObot5M?Y+bmcP-|hxo!E*k1sm7e$Soz zF3R3Gur9y6{nb}|v3u?B&#kz|RyMA~xBQrQvlc|Txd#}9zmhYQSedMj}i36Xx zmyaL$&8o|eZ~kWeEloEavajyXKl|JM76~^se6)Snfmhr1{N&<)-_dDQ`{zFUG3%*s zr#|a`cRYVd`}sdy_bhko;w$PNI}&$=mtV6v{qt_Gty=!U%26x7ANzP3U;o7Mp3%=6 z7TkGndY#$7zcrF?TzmdV>l00fxJMt){NDb_5ned({$pu9-|#e=(b4sA!pb51*3})Y zYoDlhV)5E7@1%S@Yz+VQm8n(xS`xXBysK&`(_5=G&Dc=H`BV#TbKjjgix+&yH~;MZO~X6YZu!oZVF^pN+;Et`@TcwiFCQ1` zKOB8%|9}2_uou5PF#m%en?>LK+{&L`*_d!gPyU|0-&lW*;cot-Q`gixdzh}`yT{}l zy6cvA(jMyXzhuqju3~=S-mU#|o-tqe-jEH)zyE5ho_~JLoXI;1iXQ3^`>j}a*~&}# z*W(W~`_IL;{_8&bc319}6MOmj-cQzV{p`@=k56CKB$ z+Q0r+{D_vn-ge!xE`iz)&9}YRV($qy^ zfJ-`j^Rs>c|H!i2`^+2IcF6nwQDcv_o$u$r{V96IlwObc7hUnuwso!Qj^;n;q#wLV zEQ`%}`i`eMG`^uJfBBm^2M%8QQ}J{AI@YfH>#e2y=+S@Fs=skWX4}^$mEQeU&KtaM z==3`O`SAO_Szk@t-9Bc~Tm1gnJ9qUP`)=UGvYoc3Q6FB<_vqK9wHW>Rs#n)~-<>u= zoWM7j^Iqn}#QD4LDZM(zt$!?)zi#}%;k&y1lr#3@YxfH6QjhcN+Lw$w{?sR(jyykS z&Hm#Z?&cGIO=@&U`j9_z=A`UA-leYA>o5Pu0UB!>Lx3T`5MT%}1Q-Gg0fqoWfFZyT zUcrnkk9|Sgc^^79+oK}oIE*{4z&53{x<9D8r9$XrYE_- ztIBtzq0P}prRppCPIrFPq}SEwXN2;HrW?fcA5Guc*7SEDpLuI_&XudIp3E3SQ>}BA zzNoe7GW9tlmC2FI--vqmzN(zlGOq3m*DsQps&E~gd_bV@$*+ys-lC%OKH8)%yZ&s> zZK{GQ6_PYe_|HX|DvCh#eOI50@5V~wC#P0)zRr+T(=F9GS4E}b-{LkZX{Sr;9Gj{t zH#2qHqv!Jcy{gt*UAm1a3wDbtrj(Rd+vg&EdCHy1THjN(t>?}=<8#k2M)Q+>(wSt~ z-2k2LSFLjyWWpDsUz<HEOY-?3ElHCpFhh0>kt^a1^#PW0XQ`TE@!y&%x08p20KIUoKr&NJDP(DPS1 zccQw#-|F6&aB+2+Krf_RTZ_&GIaj}@V=nAZ--kM4XLRXY1)(Fkc8}ELd-TP1n+{uC z1^Lw_u^TpBNMYK+gb$wRQ(b1zk4d_t?YTVXVIG&!0b%4{{`)1a`(0Y+*j1+3*4n?% zQ-A;8xb}%Me`QP+lo!=5HbJA2qwGy)~>#ItK-dF}-|Jl4S z*{GH^V|=LabC7Ns-Dpe8vygLL!m~g1J`4U(*5$G96q%5@L-$z!Bvs+`S|9o*s?vYA z+upUKCI>1|>i)V@QkPUv9;s+_+-r}h&sU5@cfRsnDW5$tr3%7-O?pE=0(5D*6{D+j zUgz6&-&wg-CI3>xglB4UE~QGuUvirq+jd~Os^)cZ_Y88X($&57)Oq^ixnSB?hrfEh z2D3BK)4w|B)rE?aH;S8RvFI($f(4{Vz2+ zZ*C2@b@LFXD>qaS}ssz$k-b%KBKjp=d%*Ef^$5{Kh@ zM{3Ks>YRJ55>f89r@m8%iq21!iSuI~^tYE2s;ggDze{z_8(x(>_|8A`T(`-F%-hxH zMlDSGdgw5f{(raI+}NBzhK5ob5^uV3pejGf@cvtMRp}37ckQ;Q(tq~t&s>8)V*l() z&!WC5iTAqtSAqXq-6MMSxn`aDXVQFC;QN0eS#Nmy$A)MOUuWQ?*|_eEpZv4>9O`q` z&Z+wLiTt?|rXlB6-L^)F8u^uFEr{Du*HIbKc_=?r`=OJwRC1rG<+@{%D*ad8*4HQZ zu2qA|d(~PvZ$b_DjwX+Ocw7zmWR{Lm?zK(i1iLZ>7y=9dh5$o=A;1t|2rvW~0t^9$ z07HNw@b5&x==0hIug_$5TdZc6bCrUZ=<57JY8B*<|uqEoR7- zOeUwt?Q~m=HlNe&bz2=Kr^76uD!a{Q5j}#*ZZVmy4v!m3nV_2ogp%7Qc}0iGCwlA_ zv*5M49cIbla|s@&;DLCPX!Ss%*&LG($$!7SM9UXRafu^X+D&uMemoL;BZ>U3GWKC{DP z^>_rE4*y?a@nA(NpzY7m&59DdCh`bviMA>#%8pe+>+gCb%|D|39a`!?H(&sa=Tnk z!Rr`i`(H5%^s^wGI`8Cn++A4-GbKy1>KU(

~fQL;LXKC9d6^a5j> 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

J1EKTR2Av``5!sA^8i)S4IPO<|GlH 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[Og zg=7@I1g+)F{}A%BIhp{R|K*?mRU^^W#;V*0U!v^gRl~n*wclR8Yv&H9aG(y^DjH(t zh?mw8G#Ktq=TUZOFoy3#UNG;tYF_gef4kVEN@7MbX2s+UgXlJ*Q~8%cfr7n2ZvZG# z>dV73GyVr&jsO*;OtEN>(3*K0<@h|-^a5p#mIVussXxk}5DOxq$S-pvnsfdn(o7(z zUr>`0Q5*#tIp@y?y@z1soimNg-1%S`>NPB|>xOx!-YB3mE9y~D|LqOz#NZ}Jwd}|j)e!nv`F-=S zeSJlHmT|9o)jVw;wwkr`i*~d1Yr7u;H(lI*d2$PG={kyfej~Rp`HX$tQ(Va3Z|I>2UofhPQlSpL zadG;tUZhi$S6u@GpO@7R#SF&au1d~Ngj`vL!5x@B%_H6C=lYB-BZ5r6O@rCNodX@o zVoZ_?@d%=AxgVEsJ>!qt&Jj(%c@h69D3}1#ogSa#x`Gexp2xmx7n9~rpuL!$kF1pv z-@QUIKo9?vcfB;OudbTs5DBA^&s@PqTTs&Y{_y&=U9iDo#zlVe(;nV~jd( z1LT9u9}=(8@s|>78X6yg0PPCpWKbN7pSB;5h$Hd01{own(^&Y*Yo1-UKj+>bU$*k^ zuO&(O)8>c6#%Dl!d-q*T`6$PauOSufH~Li2@ARSMeyfkw50u^3F3wLs+ZXO?cJg`i zPn(jR!*}e4%gc)^Q7xn1PP6guV>A8rNe;91A`7}zXSK=Qymy}=(_J!V| z+R?M@A`vg1{JkqMrvTW1FrXe{)Pc5^@rKZEpjA;Q!7Bi|yd_3GabJiK(ovv>`9N=V z`edp6_!r49Ys7(7z0ZS;lRAf!jT5om(s9X=XUP?l10_o2>CJvg4?UjSAJgOOIbI)I&vp6~-_3cfWJk5lxleERWDU|wZ%k7< zjHhdo4r9GG>2;s1QF`5twfZ?3+T%4_AAYoU>EXv~nBMToT5g`cv8L%{Y_4s3aC42* zgPUueUNvcA=0sq9SgH)%!yW!98Q`Nm@aQN!M0aj_yG?;i7gYxz$$UC&eS;}WF0;Nk zPz0#hlZ)dnQz-f5p`GSP4yP+cg#P`p_3lW=%%OeZvzary~7 zz1Lz+YA89H&Ig_heKnH9=`dnee{wus@2{`-=riV)WG5DwvLc8kUjT$!4PrRcF$CMa`=D#^I?ai=sEd;J$4r0 S`sv+j;|SKzDEP1M|MP!O8DEzG From 35bdb7c593d09d41625117ac0dbb40f0ecc5a239 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Mon, 19 May 2025 14:55:33 -0500 Subject: [PATCH 23/31] bdb: remove unused code Signed-off-by: Hank Donnay --- internal/rpm/bdb/bdb.go | 21 --------------------- internal/rpm/bdb/bdb_test.go | 14 ++++++++------ 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/internal/rpm/bdb/bdb.go b/internal/rpm/bdb/bdb.go index 0b942cde0..971afc3bf 100644 --- a/internal/rpm/bdb/bdb.go +++ b/internal/rpm/bdb/bdb.go @@ -264,27 +264,6 @@ func (db *PackageDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] } } -func tryCollect[T any](seq iter.Seq2[T, error]) ([]T, error) { - var slice []T - for v, err := range seq { - if err != nil { - return nil, err - } - slice = append(slice, v) - } - return slice, nil -} - -// AllHeaders returns ReaderAts for all RPM headers in the PackageDB. -func (db *PackageDB) AllHeaders(ctx context.Context) ([]io.ReaderAt, error) { - return tryCollect(db.Headers(ctx)) -} - -// Validate is currently here to fulfill an interface. -func (db *PackageDB) Validate(_ context.Context) error { - return nil -} - // Rope provides an [io.ReaderAt] over an ordered slice of [io.ReaderAt]. // // It's much simpler than a real rope because it's append only. diff --git a/internal/rpm/bdb/bdb_test.go b/internal/rpm/bdb/bdb_test.go index e1c8f4a77..a45d06e50 100644 --- a/internal/rpm/bdb/bdb_test.go +++ b/internal/rpm/bdb/bdb_test.go @@ -32,16 +32,17 @@ func TestLoadPackage(t *testing.T) { if err := pkg.Parse(pkgf); err != nil { t.Fatal(err) } - rds, err := pkg.AllHeaders(ctx) - if err != nil { - t.Fatal(err) - } - t.Logf("got %d headers", len(rds)) - for _, rd := range rds { + ct := 0 + for rd, err := range pkg.Headers(ctx) { + if err != nil { + t.Error(err) + continue + } var h rpmdb.Header if err := h.Parse(ctx, rd); err != nil { t.Fatal(err) } + ct++ var found bool for i := range h.Infos { if h.Infos[i].Tag == rpmdb.TagName { @@ -59,6 +60,7 @@ func TestLoadPackage(t *testing.T) { t.Error(`missing "name" tag`) } } + t.Logf("got %d headers", ct) }) } } From 45175d9dd90301932f56b3fa3581a8f329bed548 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Mon, 19 May 2025 14:59:57 -0500 Subject: [PATCH 24/31] sqlite: remove unused code Signed-off-by: Hank Donnay --- internal/rpm/sqlite/sqlite.go | 28 +--------------------------- internal/rpm/sqlite/sqlite_test.go | 11 ++++++----- 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/internal/rpm/sqlite/sqlite.go b/internal/rpm/sqlite/sqlite.go index dbd8c2dd7..aab725a6b 100644 --- a/internal/rpm/sqlite/sqlite.go +++ b/internal/rpm/sqlite/sqlite.go @@ -64,7 +64,7 @@ func (db *RPMDB) Close() error { return db.db.Close() } -// Headers returns all RPM headers in the database. +// Headers returns an iterator over all RPM headers in the database. func (db *RPMDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] { // Keys are sorted coming out of this query. rows, err := db.db.QueryContext(ctx, allpackages) @@ -95,32 +95,6 @@ func (db *RPMDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] { } } -// AllHeaders returns ReaderAts for all RPM headers in the database. -func (db *RPMDB) AllHeaders(ctx context.Context) ([]io.ReaderAt, error) { - // Keys are sorted coming out of this query. - rows, err := db.db.QueryContext(ctx, allpackages) - if err != nil { - return nil, err - } - defer rows.Close() - var r []io.ReaderAt - var hnum int64 - for rows.Next() { - blob := make([]byte, 0, 4*4096) // Eyeballing a good initial capacity; do some profiling. - // As an alternative, this function could allocate one large buffer and subslice it for each - // Scan call, then use io.SectionReaders for the returned []io.ReaderAt. - if err := rows.Scan(&hnum, &blob); err != nil { - return nil, fmt.Errorf("sqlite: scan error: %w", err) - } - r = append(r, bytes.NewReader(blob)) - } - if err := rows.Err(); err != nil { - return nil, fmt.Errorf("sqlite: sql error: %w", err) - } - - return r, nil -} - func (db *RPMDB) Validate(ctx context.Context) error { var ignore int64 err := db.db.QueryRow(validate).Scan(&ignore) diff --git a/internal/rpm/sqlite/sqlite_test.go b/internal/rpm/sqlite/sqlite_test.go index 62c9dcd89..e22ed6c75 100644 --- a/internal/rpm/sqlite/sqlite_test.go +++ b/internal/rpm/sqlite/sqlite_test.go @@ -66,12 +66,13 @@ func TestPackages(t *testing.T) { t.Error(err) } - hdrs, err := db.AllHeaders(ctx) - if err != nil { - t.Error(err) - } var got []uint64 - for _, rd := range hdrs { + for rd, err := range db.Headers(ctx) { + if err != nil { + t.Error(err) + got = append(got, 0) + continue + } h.Reset() if _, err := io.Copy(h, rd.(io.Reader)); err != nil { t.Error(err) From e77c9cdbb98d63bef3c0eeadc5091ad71c8ad60a Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Tue, 20 May 2025 11:36:42 -0500 Subject: [PATCH 25/31] rhel: use archive test helper Signed-off-by: Hank Donnay --- rhel/packagescanner_test.go | 91 +------------------------------------ 1 file changed, 2 insertions(+), 89 deletions(-) diff --git a/rhel/packagescanner_test.go b/rhel/packagescanner_test.go index a7b7ea5b0..fc1dcaccd 100644 --- a/rhel/packagescanner_test.go +++ b/rhel/packagescanner_test.go @@ -3,15 +3,10 @@ package rhel import ( "context" "path/filepath" - "slices" - "strings" "testing" - "github.com/google/go-cmp/cmp" "github.com/quay/zlog" - "github.com/quay/claircore" - "github.com/quay/claircore/internal/wart" "github.com/quay/claircore/test" "github.com/quay/claircore/test/rpmtest" ) @@ -39,6 +34,7 @@ func TestPackageDetection(t *testing.T) { repoAllow := map[string][]string{ "registry.access.redhat.com/ubi9/httpd-24": {"RHEL-9.0.0-updates-20220503.2-AppStream", "RHEL-9.0.0-updates-20220503.2-BaseOS"}, } + s := new(PackageScanner) for _, m := range ms { ar, err := rpmtest.OpenArchive(ctx, m) @@ -46,89 +42,6 @@ func TestPackageDetection(t *testing.T) { t.Error(err) continue } - - for _, ref := range ar.Repositories() { - t.Run(ref, func(t *testing.T) { - t.Parallel() - - arches := map[string]struct{}{} - reg, repo, _ := strings.Cut(ref, "/") - imgs, err := ar.Image(reg, repo) - if err != nil { - t.Fatal(err) - } - - for _, img := range imgs.Data { - // Only consider the first listed instance of an - // architecture, since that's the only rpm manifest that - // will be populated. - if _, skip := arches[img.Archtecture]; skip { - continue - } - arches[img.Archtecture] = struct{}{} - - t.Run(img.Archtecture, func(t *testing.T) { - ctx := zlog.Test(ctx, t) - m, err := ar.Manifest(img.ID) - if err != nil { - t.Fatal(err) - } - - repos := repoAllow[ref] - for _, r := range img.ParsedData.Repos { - repos = append(repos, r.ID) - } - t.Logf("allowlisting rpm repositories: %#v", repos) - - var got []*claircore.Package - // Start with the top-most layer. - for i, digest := range img.ParsedData.Layers { - layerRef := test.LayerRef{ - Registry: reg, - Name: repo, - Digest: digest, - } - - // Fetch the layer via the test caching machinery. - a.LoadLayerFromRegistry(ctx, t, layerRef) - r := a.Realizer(ctx).(*test.CachedRealizer) - t.Cleanup(func() { - if err := r.Close(); err != nil { - t.Error(err) - } - }) - ls, err := r.RealizeDescriptions(ctx, []claircore.LayerDescription{ - { - Digest: digest, - URI: "http://example.com", - MediaType: test.MediaType, - Headers: make(map[string][]string), - }, - }) - if err != nil { - t.Fatal(err) - } - - got, err = new(PackageScanner).Scan(ctx, &ls[0]) - if err != nil { - t.Error(err) - } - if len(got) != 0 { - break - } - t.Logf("skipped layer %d (%s): no packages", i+1, digest) - } - - seq := rpmtest.PackagesFromManifest(t, slices.Values(m.RPMs)) - want := wart.CollectPointer(seq) - - opts := rpmtest.Options(t, repos) - if !cmp.Equal(got, want, opts) { - t.Error(cmp.Diff(got, want, opts)) - } - }) - } - }) - } + ar.Tests(ctx, a, repoAllow, s.Scan)(t) } } From a57f5465a1444a151ef8d63da3d61899b07179c9 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 21 May 2025 10:29:09 -0500 Subject: [PATCH 26/31] rhel: test cleanups Signed-off-by: Hank Donnay --- rhel/coalescer_test.go | 695 +++++++++++++++++-------------- rhel/distributionscanner_test.go | 1 + rhel/matcher_test.go | 2 + rhel/packagescanner_test.go | 1 + rhel/parse_test.go | 11 +- 5 files changed, 399 insertions(+), 311 deletions(-) diff --git a/rhel/coalescer_test.go b/rhel/coalescer_test.go index 946f9452d..12fb48a35 100644 --- a/rhel/coalescer_test.go +++ b/rhel/coalescer_test.go @@ -2,340 +2,423 @@ package rhel import ( "context" - "strconv" + "fmt" + "net/url" "testing" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" "github.com/quay/zlog" "github.com/quay/claircore" "github.com/quay/claircore/indexer" "github.com/quay/claircore/test" + "github.com/quay/claircore/toolkit/types/cpe" ) -// TestCoalescer tests the private method coalesce on the rhel.Coalescer. -// it's simpler to test the core business logic of a rhel.Coalescer after -// database access would have occurred. Thus we do not use a black box test -// and instead test private methods. -func TestCoalescer(t *testing.T) { - ctx := zlog.Test(context.Background(), t) - coalescer := new(Coalescer) - // we will test - // 1) packages before a distribution was discovered are tagged with - // the first distribution found - // 2) all packages found after a subsequent distribution is located - // are tagged with this distribution - pkgs := test.GenUniquePackages(6) - dists := test.GenUniqueDistributions(3) // we will discard dist 0 due to zero value ambiguity - layerArtifacts := []*indexer.LayerArtifacts{ - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:1], - Dist: nil, - Repos: nil, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:2], - Dist: nil, - Repos: nil, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:3], - Dist: dists[1:2], - Repos: nil, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:4], - Dist: nil, - Repos: nil, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:5], - Dist: dists[2:], - Repos: nil, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:], - Dist: nil, - Repos: nil, - }, - } - ir, err := coalescer.Coalesce(ctx, layerArtifacts) - if err != nil { - t.Fatalf("received error from coalesce method: %v", err) - } - // we expect packages 1-4 to be tagged with dist id 1 - // and packages 5-6 to be tagged with dist id 2 - for i := 0; i < 4; i++ { - environment := ir.Environments[strconv.Itoa(i)][0] - if environment.DistributionID != "1" { - t.Fatalf("expected distribution id %d but got %s", 1, environment.DistributionID) - } - } - for i := 4; i < 6; i++ { - environment := ir.Environments[strconv.Itoa(i)][0] - if environment.DistributionID != "2" { - t.Fatalf("expected distribution id %d but got %s", 2, environment.DistributionID) - } - } +type CoalescerTestcase struct { + Name string + Fixture func(testing.TB) ([]*indexer.LayerArtifacts, *claircore.IndexReport) } -func TestCoalescerCPERepos(t *testing.T) { - ctx := zlog.Test(context.Background(), t) - coalescer := new(Coalescer) - repo1 := &claircore.Repository{ - ID: "1", - Name: "rhel-8-for-x86_64-baseos-rpms", - Key: repositoryKey, - } - repo2 := &claircore.Repository{ - ID: "2", - Name: "rhel-8-for-x86_64-appstream-rpms", - Key: repositoryKey, - } - repo3 := &claircore.Repository{ - ID: "3", - Name: "rhel-8-for-x86_64-appstream-rpms", - Key: repositoryKey, - } - - pkgs := test.GenUniquePackages(5) - dists := test.GenUniqueDistributions(3) // we will discard dist 0 due to zero value ambiguity - layerArtifacts := []*indexer.LayerArtifacts{ - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:1], - Dist: nil, - Repos: nil, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:2], - Dist: nil, - Repos: []*claircore.Repository{repo1, repo2}, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:3], - Dist: dists[1:2], - Repos: []*claircore.Repository{repo3}, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:4], - Dist: nil, - Repos: nil, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: pkgs[0:5], - Dist: dists[2:], - Repos: nil, - }, - } - ir, err := coalescer.Coalesce(ctx, layerArtifacts) - if err != nil { - t.Fatalf("received error from coalesce method: %v", err) - } - // we expect packages 1-2 to be associated with repos 1 and 2 - for i := 0; i < 2; i++ { - environment := ir.Environments[strconv.Itoa(i)][0] - if len(environment.RepositoryIDs) != 2 || environment.RepositoryIDs[0] != "1" || environment.RepositoryIDs[1] != "2" { - t.Fatalf("expected repository ids [1, 2] but got %s", environment.RepositoryIDs) +func (tc CoalescerTestcase) Run(ctx context.Context, t *testing.T) { + t.Run(tc.Name, func(t *testing.T) { + ctx := zlog.Test(ctx, t) + input, want := tc.Fixture(t) + got, err := new(Coalescer).Coalesce(ctx, input) + if err != nil { + t.Fatal(err) } - } - // and packages 3-5 to be associated with repo 3 - for i := 2; i < 5; i++ { - environment := ir.Environments[strconv.Itoa(i)][0] - if len(environment.RepositoryIDs) != 1 || environment.RepositoryIDs[0] != "3" { - t.Fatalf("expected repository ids [3] but got %s", environment.RepositoryIDs) + opts := cmp.Options{cmpopts.IgnoreUnexported(claircore.Digest{})} + if !cmp.Equal(got, want, opts) { + t.Error(cmp.Diff(got, want, opts)) } - } + }) } -func TestCoalescerUpdatedPackage(t *testing.T) { +// TestCoalescer tests the private method coalesce on the [Coalescer]. +// +// It's simpler to test the core business logic of a [Coalescer] after database +// access would have occurred. +func TestCoalescer(t *testing.T) { + t.Parallel() ctx := zlog.Test(context.Background(), t) - coalescer := new(Coalescer) - repo1 := &claircore.Repository{ - ID: "1", - Name: "cpe:/o:redhat:enterprise_linux:8::baseos", - Key: "rhel-cpe-repo", - } - repo2 := &claircore.Repository{ - ID: "2", - Name: "cpe:/o:redhat:enterprise_linux:8::appstream", - Key: "rhel-cpe-repo", - } - pkg1 := &claircore.Package{ - ID: "1", - Name: "foo", - Version: "1.0-1", - PackageDB: "/var/lib/rpm", - } - pkg2 := &claircore.Package{ - ID: "2", - Name: "foo", - Version: "2.0-1", - PackageDB: "/var/lib/rpm", - } - layerArtifacts := []*indexer.LayerArtifacts{ - { - Hash: test.RandomSHA256Digest(t), - Pkgs: []*claircore.Package{pkg1}, - Dist: nil, - Repos: []*claircore.Repository{repo1}, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: nil, - Dist: nil, - Repos: nil, - }, - { - Hash: test.RandomSHA256Digest(t), - Pkgs: []*claircore.Package{pkg2}, - Dist: nil, - Repos: []*claircore.Repository{repo2}, - }, - } - ir, err := coalescer.Coalesce(ctx, layerArtifacts) - if err != nil { - t.Fatalf("received error from coalesce method: %v", err) - } - if _, ok := ir.Packages[pkg1.ID]; ok { - t.Fatalf("Package %v was updated to %v, but previous version is still available", pkg1, pkg2) - } - if _, ok := ir.Environments[pkg1.ID]; ok { - t.Fatalf("Package %v was updated to %v, but previous version is still available in environment", pkg1, pkg2) - } - if _, ok := ir.Packages[pkg2.ID]; !ok { - t.Fatalf("Package %v was updated to %v, but new version is not available", pkg1, pkg2) - } - if _, ok := ir.Environments[pkg2.ID]; !ok { - t.Fatalf("Package %v was updated to %v, but new version is still not available in environment", pkg1, pkg2) - } -} -func TestCoalescerDowngradedPackage(t *testing.T) { - ctx := zlog.Test(context.Background(), t) - coalescer := new(Coalescer) - repo1 := &claircore.Repository{ - ID: "1", - Name: "cpe:/o:redhat:enterprise_linux:8::baseos", - Key: "rhel-cpe-repo", - } - repo2 := &claircore.Repository{ - ID: "2", - Name: "cpe:/o:redhat:enterprise_linux:8::appstream", - Key: "rhel-cpe-repo", - } - pkg1 := &claircore.Package{ - ID: "1", - Name: "foo", - Version: "1.0-1", - PackageDB: "/var/lib/rpm", - } - pkg2 := &claircore.Package{ - ID: "2", - Name: "foo", - Version: "2.0-1", - PackageDB: "/var/lib/rpm", - } - layerArtifacts := []*indexer.LayerArtifacts{ + tcs := []CoalescerTestcase{ { - Hash: test.RandomSHA256Digest(t), - Pkgs: []*claircore.Package{pkg2}, - Dist: nil, - Repos: []*claircore.Repository{repo1}, + Name: "Simple", + Fixture: func(t testing.TB) ([]*indexer.LayerArtifacts, *claircore.IndexReport) { + pkgs := test.GenUniquePackages(6) + // Discard dist 0 due to zero value ambiguity. + dists := test.GenUniqueDistributions(3) + input := []*indexer.LayerArtifacts{ + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:1], + Dist: nil, + Repos: nil, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:2], + Dist: nil, + Repos: nil, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:3], + Dist: dists[1:2], + Repos: nil, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:4], + Dist: nil, + Repos: nil, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:5], + Dist: dists[2:], + Repos: nil, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:], + Dist: nil, + Repos: nil, + }, + } + want := &claircore.IndexReport{ + Hash: test.RandomSHA256Digest(t), + Packages: map[string]*claircore.Package{}, + Distributions: map[string]*claircore.Distribution{ + dists[1].ID: dists[1], + dists[2].ID: dists[2], + }, + Repositories: map[string]*claircore.Repository{}, + Environments: map[string][]*claircore.Environment{}, + } + for i, pkg := range pkgs { + k := fmt.Sprint(i) + want.Environments[k] = []*claircore.Environment{ + { + PackageDB: fmt.Sprintf("package-db-%d", i), + RepositoryIDs: []string{}, + }, + } + switch i { + case 0, 1, 2, 3: + want.Environments[k][0].DistributionID = dists[1].ID + case 4, 5: + want.Environments[k][0].DistributionID = dists[2].ID + } + want.Packages[pkg.ID] = pkg + } + + return input, want + }, }, { - Hash: test.RandomSHA256Digest(t), - Pkgs: nil, - Dist: nil, - Repos: nil, + Name: "CPERepos", + Fixture: func(t testing.TB) ([]*indexer.LayerArtifacts, *claircore.IndexReport) { + repo1 := &claircore.Repository{ + ID: "1", + Name: "rhel-8-for-x86_64-baseos-rpms", + Key: repositoryKey, + } + repo2 := &claircore.Repository{ + ID: "2", + Name: "rhel-8-for-x86_64-appstream-rpms", + Key: repositoryKey, + } + repo3 := &claircore.Repository{ + ID: "3", + Name: "rhel-8-for-x86_64-appstream-rpms", + Key: repositoryKey, + } + pkgs := test.GenUniquePackages(5) + // Discard dist 0 due to zero value ambiguity. + dists := test.GenUniqueDistributions(3) + + input := []*indexer.LayerArtifacts{ + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:1], + Dist: nil, + Repos: nil, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:2], + Dist: nil, + Repos: []*claircore.Repository{repo1, repo2}, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:3], + Dist: dists[1:2], + Repos: []*claircore.Repository{repo3}, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:4], + Dist: nil, + Repos: nil, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: pkgs[0:5], + Dist: dists[2:], + Repos: nil, + }, + } + + want := &claircore.IndexReport{ + Hash: test.RandomSHA256Digest(t), + Packages: map[string]*claircore.Package{}, + Distributions: map[string]*claircore.Distribution{ + dists[1].ID: dists[1], + dists[2].ID: dists[2], + }, + Repositories: map[string]*claircore.Repository{ + repo3.Name: repo3, + repo1.Name: repo1, + }, + Environments: map[string][]*claircore.Environment{}, + } + for i, pkg := range pkgs { + k := fmt.Sprint(i) + want.Environments[k] = []*claircore.Environment{ + { + PackageDB: fmt.Sprintf("package-db-%d", i), + }, + } + switch i { + case 0, 1: + want.Environments[k][0].RepositoryIDs = []string{repo1.Name, repo2.Name} + case 2, 3, 4: + want.Environments[k][0].RepositoryIDs = []string{repo3.Name} + } + switch i { + case 0, 1, 2, 3: + want.Environments[k][0].DistributionID = dists[1].ID + case 4: + want.Environments[k][0].DistributionID = dists[2].ID + } + want.Packages[pkg.ID] = pkg + } + + return input, want + }, }, { - Hash: test.RandomSHA256Digest(t), - Pkgs: []*claircore.Package{pkg1}, - Dist: nil, - Repos: []*claircore.Repository{repo2}, - }, - } - ir, err := coalescer.Coalesce(ctx, layerArtifacts) - if err != nil { - t.Fatalf("received error from coalesce method: %v", err) - } - if _, ok := ir.Packages[pkg2.ID]; ok { - t.Fatalf("Package %v was downgraded to %v, but previous version is still available", pkg2, pkg1) - } - if _, ok := ir.Environments[pkg2.ID]; ok { - t.Fatalf("Package %v was downgraded to %v, but previous version is still available in environment", pkg2, pkg1) - } - if _, ok := ir.Packages[pkg1.ID]; !ok { - t.Fatalf("Package %v was downgraded to %v, but new version is not available", pkg2, pkg1) - } - if _, ok := ir.Environments[pkg1.ID]; !ok { - t.Fatalf("Package %v was downgraded to %v, but new version is still not available in environment", pkg2, pkg1) - } -} + Name: "UpgradedPackage", + Fixture: func(t testing.TB) ([]*indexer.LayerArtifacts, *claircore.IndexReport) { + repo1 := &claircore.Repository{ + ID: "1", + Name: "cpe:/o:redhat:enterprise_linux:8::baseos", + Key: repositoryKey, + } + repo2 := &claircore.Repository{ + ID: "2", + Name: "cpe:/o:redhat:enterprise_linux:8::appstream", + Key: repositoryKey, + } + pkg1 := &claircore.Package{ + ID: "1", + Name: "foo", + Version: "1.0-1", + PackageDB: "fixture:/var/lib/rpm", + } + pkg2 := &claircore.Package{ + ID: "2", + Name: "foo", + Version: "2.0-1", + PackageDB: "fixture:/var/lib/rpm", + } -func TestCoalescerRemovedPackage(t *testing.T) { - ctx := zlog.Test(context.Background(), t) - coalescer := new(Coalescer) - repo1 := &claircore.Repository{ - ID: "1", - Name: "cpe:/o:redhat:enterprise_linux:8::baseos", - Key: "rhel-cpe-repo", - } - repo2 := &claircore.Repository{ - ID: "2", - Name: "cpe:/o:redhat:enterprise_linux:8::appstream", - Key: "rhel-cpe-repo", - } - pkg1 := &claircore.Package{ - ID: "1", - Name: "foo", - Version: "1.0-1", - PackageDB: "/var/lib/rpm", - } - pkg2 := &claircore.Package{ - ID: "2", - Name: "bar", - Version: "1.0-1", - PackageDB: "/var/lib/rpm", - } - layerArtifacts := []*indexer.LayerArtifacts{ - { - Hash: test.RandomSHA256Digest(t), - Pkgs: []*claircore.Package{pkg1}, - Dist: nil, - Repos: []*claircore.Repository{repo1}, + input := []*indexer.LayerArtifacts{ + { + Hash: test.RandomSHA256Digest(t), + Pkgs: []*claircore.Package{pkg1}, + Dist: nil, + Repos: []*claircore.Repository{repo1}, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: nil, + Dist: nil, + Repos: nil, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: []*claircore.Package{pkg2}, + Dist: nil, + Repos: []*claircore.Repository{repo2}, + }, + } + + want := &claircore.IndexReport{ + Hash: test.RandomSHA256Digest(t), + Packages: map[string]*claircore.Package{pkg2.ID: pkg2}, + Distributions: map[string]*claircore.Distribution{}, + Repositories: map[string]*claircore.Repository{ + repo2.Name: repo2, + repo1.Name: repo1, + }, + Environments: map[string][]*claircore.Environment{ + pkg2.ID: { + { + PackageDB: pkg2.PackageDB, + RepositoryIDs: []string{repo2.Name}, + }, + }, + }, + } + + return input, want + }, }, { - Hash: test.RandomSHA256Digest(t), - Pkgs: nil, - Dist: nil, - Repos: nil, + Name: "DowngradedPackage", + Fixture: func(t testing.TB) ([]*indexer.LayerArtifacts, *claircore.IndexReport) { + repo1 := &claircore.Repository{ + ID: "1", + Name: "cpe:/o:redhat:enterprise_linux:8::baseos", + Key: repositoryKey, + } + repo2 := &claircore.Repository{ + ID: "2", + Name: "cpe:/o:redhat:enterprise_linux:8::appstream", + Key: repositoryKey, + } + pkg1 := &claircore.Package{ + ID: "1", + Name: "foo", + Version: "1.0-1", + PackageDB: "fixture:/var/lib/rpm", + } + pkg2 := &claircore.Package{ + ID: "2", + Name: "bar", + Version: "1.0-1", + PackageDB: "fixture:/var/lib/rpm", + } + + input := []*indexer.LayerArtifacts{ + { + Hash: test.RandomSHA256Digest(t), + Pkgs: []*claircore.Package{pkg2}, + Dist: nil, + Repos: []*claircore.Repository{repo1}, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: nil, + Dist: nil, + Repos: nil, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: []*claircore.Package{pkg1}, + Dist: nil, + Repos: []*claircore.Repository{repo2}, + }, + } + + want := &claircore.IndexReport{ + Hash: test.RandomSHA256Digest(t), + Packages: map[string]*claircore.Package{pkg1.ID: pkg1}, + Distributions: map[string]*claircore.Distribution{}, + Repositories: map[string]*claircore.Repository{ + repo2.Name: repo2, + repo1.Name: repo1, + }, + Environments: map[string][]*claircore.Environment{ + pkg1.ID: { + { + PackageDB: pkg1.PackageDB, + RepositoryIDs: []string{repo2.Name}, + }, + }, + }, + } + + return input, want + }, }, { - Hash: test.RandomSHA256Digest(t), - Pkgs: []*claircore.Package{pkg2}, - Dist: nil, - Repos: []*claircore.Repository{repo2}, + Name: "RemovedPackage", + Fixture: func(t testing.TB) ([]*indexer.LayerArtifacts, *claircore.IndexReport) { + repo1 := &claircore.Repository{ + ID: "1", + Name: "cpe:/o:redhat:enterprise_linux:8::baseos", + Key: repositoryKey, + } + repo2 := &claircore.Repository{ + ID: "2", + Name: "cpe:/o:redhat:enterprise_linux:8::appstream", + Key: repositoryKey, + } + pkg1 := &claircore.Package{ + ID: "1", + Name: "foo", + Version: "1.0-1", + PackageDB: "fixture:/var/lib/rpm", + } + pkg2 := &claircore.Package{ + ID: "2", + Name: "bar", + Version: "1.0-1", + PackageDB: "fixture:/var/lib/rpm", + } + + input := []*indexer.LayerArtifacts{ + { + Hash: test.RandomSHA256Digest(t), + Pkgs: []*claircore.Package{pkg1}, + Dist: nil, + Repos: []*claircore.Repository{repo1}, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: nil, + Dist: nil, + Repos: nil, + }, + { + Hash: test.RandomSHA256Digest(t), + Pkgs: []*claircore.Package{pkg2}, + Dist: nil, + Repos: []*claircore.Repository{repo2}, + }, + } + + want := &claircore.IndexReport{ + Hash: test.RandomSHA256Digest(t), + Packages: map[string]*claircore.Package{pkg2.ID: pkg2}, + Distributions: map[string]*claircore.Distribution{}, + Repositories: map[string]*claircore.Repository{ + repo2.Name: repo2, + repo1.Name: repo1, + }, + Environments: map[string][]*claircore.Environment{ + pkg2.ID: { + { + PackageDB: pkg2.PackageDB, + RepositoryIDs: []string{repo2.Name}, + }, + }, + }, + } + + return input, want + }, }, } - ir, err := coalescer.Coalesce(ctx, layerArtifacts) - if err != nil { - t.Fatalf("received error from coalesce method: %v", err) - } - if _, ok := ir.Packages[pkg1.ID]; ok { - t.Fatalf("Package %v was removed, but it is still available", pkg1) - } - if _, ok := ir.Environments[pkg1.ID]; ok { - t.Fatalf("Package %v was removed, but it is still available in environment", pkg1) + + for _, tc := range tcs { + tc.Run(ctx, t) } } diff --git a/rhel/distributionscanner_test.go b/rhel/distributionscanner_test.go index 6800a2de0..7e47e31f8 100644 --- a/rhel/distributionscanner_test.go +++ b/rhel/distributionscanner_test.go @@ -9,6 +9,7 @@ import ( ) func TestDistributionScanner(t *testing.T) { + t.Parallel() sys := os.DirFS(`testdata/releasefiles`) ents, err := fs.ReadDir(sys, ".") if err != nil { diff --git a/rhel/matcher_test.go b/rhel/matcher_test.go index dc8f62a3c..14171774a 100644 --- a/rhel/matcher_test.go +++ b/rhel/matcher_test.go @@ -115,6 +115,8 @@ type vulnerableTestCase struct { } func TestVulnerable(t *testing.T) { + t.Parallel() + record := &claircore.IndexRecord{ Package: &claircore.Package{ Version: "0.33.0-6.el8", diff --git a/rhel/packagescanner_test.go b/rhel/packagescanner_test.go index fc1dcaccd..0662d937f 100644 --- a/rhel/packagescanner_test.go +++ b/rhel/packagescanner_test.go @@ -17,6 +17,7 @@ import ( //go:generate fetch -o testdata/package/ubi9_httpd-24.txtar ubi9/httpd-24 func TestPackageDetection(t *testing.T) { + t.Parallel() ctx := zlog.Test(context.Background(), t) ms, err := filepath.Glob("testdata/package/*.txtar") if err != nil { diff --git a/rhel/parse_test.go b/rhel/parse_test.go index 62a9e7465..e7aca3134 100644 --- a/rhel/parse_test.go +++ b/rhel/parse_test.go @@ -14,8 +14,9 @@ import ( ) func TestCVEDefFromUnpatched(t *testing.T) { + t.Parallel() ctx := context.Background() - var table = []struct { + table := []struct { name string fileName string configFunc driver.ConfigUnmarshaler @@ -23,15 +24,15 @@ func TestCVEDefFromUnpatched(t *testing.T) { ignoreUnpatched bool }{ { - name: "default path", + name: "DefaultPath", fileName: "testdata/rhel-8-rpm-unpatched.xml", - configFunc: func(_ interface{}) error { return nil }, + configFunc: func(_ any) error { return nil }, expectedVulnCount: 192, }, { - name: "ignore unpatched path", + name: "IgnoreUnpatchedPath", fileName: "testdata/rhel-8-rpm-unpatched.xml", - configFunc: func(c interface{}) error { return nil }, + configFunc: func(c any) error { return nil }, ignoreUnpatched: true, expectedVulnCount: 0, }, From 26f693a0e7fa0670e4a3eb0e2d8728f778f06b3a Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 21 May 2025 10:34:52 -0500 Subject: [PATCH 27/31] rhel: add coalescer test Signed-off-by: Hank Donnay --- rhel/coalescer_test.go | 49 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/rhel/coalescer_test.go b/rhel/coalescer_test.go index 12fb48a35..6eb6c7876 100644 --- a/rhel/coalescer_test.go +++ b/rhel/coalescer_test.go @@ -8,12 +8,12 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" + "github.com/quay/claircore/toolkit/types/cpe" "github.com/quay/zlog" "github.com/quay/claircore" "github.com/quay/claircore/indexer" "github.com/quay/claircore/test" - "github.com/quay/claircore/toolkit/types/cpe" ) type CoalescerTestcase struct { @@ -36,10 +36,6 @@ func (tc CoalescerTestcase) Run(ctx context.Context, t *testing.T) { }) } -// TestCoalescer tests the private method coalesce on the [Coalescer]. -// -// It's simpler to test the core business logic of a [Coalescer] after database -// access would have occurred. func TestCoalescer(t *testing.T) { t.Parallel() ctx := zlog.Test(context.Background(), t) @@ -416,6 +412,49 @@ func TestCoalescer(t *testing.T) { return input, want }, }, + { + Name: "WithDNF", + Fixture: func(t testing.TB) ([]*indexer.LayerArtifacts, *claircore.IndexReport) { + repo1 := &claircore.Repository{ + ID: "1", + Name: "test_1", + CPE: cpe.MustUnbind("cpe:/o:redhat:enterprise_linux:8::appstream"), + Key: repositoryKey, + } + pkg1 := &claircore.Package{ + ID: "1", + Name: "hello", + Version: "1.0-1", + PackageDB: "fixture:/var/lib/rpm", + RepositoryHint: (url.Values{ + "repoid": {repo1.Name}, + }).Encode(), + } + input := []*indexer.LayerArtifacts{ + { + Hash: test.RandomSHA256Digest(t), + Pkgs: []*claircore.Package{pkg1}, + Dist: nil, + Repos: []*claircore.Repository{repo1}, + }, + } + want := &claircore.IndexReport{ + Hash: test.RandomSHA256Digest(t), + Packages: map[string]*claircore.Package{pkg1.ID: pkg1}, + Distributions: map[string]*claircore.Distribution{}, + Repositories: map[string]*claircore.Repository{repo1.Name: repo1}, + Environments: map[string][]*claircore.Environment{ + pkg1.ID: { + { + PackageDB: pkg1.PackageDB, + RepositoryIDs: []string{repo1.Name}, + }, + }, + }, + } + return input, want + }, + }, } for _, tc := range tcs { From e9322d6bdcc993104e4ac5dca5498abab17f20ca Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 21 May 2025 13:16:17 -0500 Subject: [PATCH 28/31] rhel: documentation pass Signed-off-by: Hank Donnay --- rhel/coalescer.go | 58 +++++++++++++++++++++------------------ rhel/matcher.go | 44 +++++++++++++++-------------- rhel/packagescanner.go | 3 ++ rhel/repositoryscanner.go | 3 ++ 4 files changed, 61 insertions(+), 47 deletions(-) diff --git a/rhel/coalescer.go b/rhel/coalescer.go index 9153a1557..3b9308759 100644 --- a/rhel/coalescer.go +++ b/rhel/coalescer.go @@ -8,17 +8,15 @@ import ( "github.com/quay/claircore/indexer" ) -/* -Coalescer takes individual layer artifacts and coalesces them into a full report -on the manifest's contents. - -Due to the specifics of the RHEL build system, some information needs to be -back-propagated. That is to say, some information discovered in later layers is -also attributed to earlier layers. Both the product and distribution information -work this way. - -A Coalescer is safe for concurrent use. -*/ +// Coalescer takes individual layer artifacts and coalesces them into a full +// report on the manifest's contents. +// +// Due to the specifics of the RHEL build system, some information needs to be +// back-propagated. That is to say, some information discovered in later layers +// is also attributed to earlier layers. Both the product and distribution +// information work this way. +// +// A Coalescer is safe for concurrent use. type Coalescer struct{} var _ indexer.Coalescer = (*Coalescer)(nil) @@ -51,6 +49,10 @@ func (*Coalescer) Coalesce(ctx context.Context, artifacts []*indexer.LayerArtifa } // The same thing has to be done in reverse, because the first layer(s) are missing // the relevant information. + // + // With [ENGCMP-5332], this shouldn't be needed, so check back in 5 years. + // + // [ENGCMP-5332]: https://issues.redhat.com/browse/ENGCMP-5332 for i := len(artifacts) - 1; i >= 0; i-- { lr := filterRedHatRepos(artifacts[i].Repos) if len(lr) != 0 { @@ -62,16 +64,18 @@ func (*Coalescer) Coalesce(ctx context.Context, artifacts []*indexer.LayerArtifa // This dance with copying the product information in both directions means // that if Red Hat product information is found, it "taints" all the layers. - // Break the key-by-ID convention because we need to talk about the repo - // name in the package matching step. + // Break the key-by-ID convention because we need to talk about the repoid + // in the package matching step. for _, a := range artifacts { for _, repo := range a.Repos { ir.Repositories[repo.Name] = repo } } // In our coalescing logic if a Distribution is found in layer "n" all packages found - // in layers [0-n] will be associated with this layer. This is for the same reasons + // in layers 0..n will be associated with this layer. This is for the same reasons // for the repository tainting, above. + // + // This may not be needed because of matcher changes. var curDist *claircore.Distribution for _, a := range artifacts { if len(a.Dist) != 0 { @@ -80,18 +84,19 @@ func (*Coalescer) Coalesce(ctx context.Context, artifacts []*indexer.LayerArtifa break } } - // Next lets begin associating packages with their Environment. We must - // consider each package in a package database as a unique entity for - // the edge case where a unique package is located in more then one package database. - // we'll use a struct as a helper and a map to lookup these structs + // Next, let's begin associating packages with their Environment. We must + // consider each package in a package database as a unique entity for the + // edge case where a unique package is located in more then one package + // database. We'll use a struct as a helper and a map to lookup these + // structs. type packageDatabase struct { packages map[string]*claircore.Package environments map[string]*claircore.Environment } dbs := map[string]*packageDatabase{} - // lets walk each layer forward looking for packages, new distributions, and - // creating the environments we discover packages in. + // Let's walk each layer forward looking for packages, new distributions, + // and creating the environments we discover packages in. for _, layerArtifacts := range artifacts { // check if we need to update our currDist if len(layerArtifacts.Dist) != 0 { @@ -141,21 +146,20 @@ func (*Coalescer) Coalesce(ctx context.Context, artifacts []*indexer.LayerArtifa // Now let's go through packages and finds out whether each package is still // available in package database in higher layers. // When package is not available in higher layers it means that package was - // either updated/downgraded/removed. In such a cases we need to remove it - // from list of packages + // either updated/downgraded/removed. // If a package is available in all layers it means that it should be added - // to list of packages and associate an environment for it. - for i := range artifacts { - currentLayerArtifacts := artifacts[i] + // to the list of packages and associate an environment for it. + for i, currentLayerArtifacts := range artifacts { if len(currentLayerArtifacts.Pkgs) == 0 { continue } for _, currentPkg := range currentLayerArtifacts.Pkgs { if _, ok := ir.Packages[currentPkg.ID]; ok { - // the package was already processed in previous layers + // The package was already processed in previous layers. continue } - // for each package let's find out if it is also available in other layers dbs + // For each package, let's find out if it is also available in other + // layer's dbs. found := true for j := i + 1; j < len(artifacts); j++ { nextLayerArtifacts := artifacts[j] diff --git a/rhel/matcher.go b/rhel/matcher.go index 8d1acbe51..af451f29f 100644 --- a/rhel/matcher.go +++ b/rhel/matcher.go @@ -12,24 +12,24 @@ import ( "github.com/quay/claircore/toolkit/types/cpe" ) -// Matcher implements driver.Matcher. +// Matcher implements [driver.Matcher]. type Matcher struct { ignoreUnpatched bool } var _ driver.Matcher = (*Matcher)(nil) -// Name implements driver.Matcher. +// Name implements [driver.Matcher]. func (*Matcher) Name() string { return "rhel" } -// Filter implements driver.Matcher. +// Filter implements [driver.Matcher]. func (*Matcher) Filter(record *claircore.IndexRecord) bool { return record.Repository != nil && record.Repository.Key == repositoryKey } -// Query implements driver.Matcher. +// Query implements [driver.Matcher]. func (m *Matcher) Query() []driver.MatchConstraint { mcs := []driver.MatchConstraint{driver.PackageModule, driver.RepositoryKey} if m.ignoreUnpatched { @@ -38,34 +38,37 @@ func (m *Matcher) Query() []driver.MatchConstraint { return mcs } -// IsCPESubstringMatch is a Red Hat specific hack that handles the "CPE patterns" in the VEX -// data. For historical/unfathomable reasons, Red Hat -// doesn't use the syntax defined in the Matching Expression spec. -// For example, "cpe:/a:redhat:openshift:4" is expected to match "cpe:/a:redhat:openshift:4.13::el8". +// IsCPESubstringMatch is a Red Hat specific hack that handles the "CPE +// patterns" in the VEX data. For historical/unfathomable reasons, Red Hat +// doesn't use the syntax defined in the Matching Expression spec. For example, +// "cpe:/a:redhat:openshift:4" is expected to match +// "cpe:/a:redhat:openshift:4.13::el8". // -// This is defined (citation needed) to be a substring match on the "pattern" and "target" CPEs. -// Since we always normalize CPEs into v2.3 "Formatted String" form, we need to trim the -// added "ANY" attributes from the pattern. +// This is defined (citation needed) to be a substring match on the "pattern" +// and "target" CPEs. Since we always normalize CPEs into v2.3 "Formatted +// String" form, we need to trim the added "ANY" attributes from the pattern. // -// TODO(crozzy) Remove once RH VEX data updates CPEs with standard matching expressions. +// TODO(crozzy) Remove once RH VEX data updates CPEs with standard matching +// expressions. func isCPESubstringMatch(recordCPE cpe.WFN, vulnCPE cpe.WFN) bool { return strings.HasPrefix(recordCPE.String(), strings.TrimRight(vulnCPE.String(), ":*")) } -// Vulnerable implements driver.Matcher. +// Vulnerable implements [driver.Matcher]. // -// Vulnerable will interpret the claircore.Vulnerability.Repo.CPE -// as a CPE match expression, and to be considered vulnerable, -// the relationship between claircore.IndexRecord.Repository.CPE and -// the claircore.Vulnerability.Repo.CPE needs to be a CPE Name Comparison -// Relation of SUPERSET(⊇)(Source is a superset or equal to the target). -// https://nvlpubs.nist.gov/nistpubs/Legacy/IR/nistir7696.pdf Section 6.2. +// Vulnerable will interpret the [claircore.Vulnerability].Repo.CPE as a CPE +// match expression, and to be considered vulnerable, the relationship between +// [claircore.IndexRecord].Repository.CPE and the +// [claircore.Vulnerability].Repo.CPE needs to be a CPE Name Comparison Relation +// of SUPERSET(⊇)(Source is a superset or equal to the target). +// +// See: https://nvlpubs.nist.gov/nistpubs/Legacy/IR/nistir7696.pdf Section 6.2. func (m *Matcher) Vulnerable(ctx context.Context, record *claircore.IndexRecord, vuln *claircore.Vulnerability) (bool, error) { if vuln.Repo == nil || record.Repository == nil || vuln.Repo.Key != repositoryKey { return false, nil } var err error - // This conversion has to be done because our current data structure doesn't + // This conversion has to be done because our current data model doesn't // support the claircore.Vulnerability.Repo.CPE field. vuln.Repo.CPE, err = cpe.Unbind(vuln.Repo.Name) if err != nil { @@ -79,6 +82,7 @@ func (m *Matcher) Vulnerable(ctx context.Context, record *claircore.IndexRecord, return false, nil } + // TODO(hank) Switch to the [rpmver] package. pkgVer := version.NewVersion(record.Package.Version) var vulnVer version.Version // Assume the vulnerability record we have is for the last known vulnerable diff --git a/rhel/packagescanner.go b/rhel/packagescanner.go index 0d0d25aba..2a5ea1e33 100644 --- a/rhel/packagescanner.go +++ b/rhel/packagescanner.go @@ -31,6 +31,9 @@ func (p PackageScanner) Name() string { return "rhel-package-scanner" } func (p PackageScanner) Version() string { return "1" } // Scan implements [indexer.PackageScanner]. +// +// This implementation stores additional information needed to correlate with +// [claircore.Repository] values in the "RepositoryHint" field. func (p PackageScanner) Scan(ctx context.Context, layer *claircore.Layer) ([]*claircore.Package, error) { if err := ctx.Err(); err != nil { return nil, err diff --git a/rhel/repositoryscanner.go b/rhel/repositoryscanner.go index 843da2e3a..b9c747197 100644 --- a/rhel/repositoryscanner.go +++ b/rhel/repositoryscanner.go @@ -182,6 +182,9 @@ func (r *RepositoryScanner) Configure(ctx context.Context, f indexer.ConfigDeser } // Scan implements [indexer.RepositoryScanner]. +// +// The two important pieces of information are the "repoid" and CPE, which are +// stored in the [claircore.Repository]'s "Name" and "CPE" fields, respectively. func (r *RepositoryScanner) Scan(ctx context.Context, l *claircore.Layer) ([]*claircore.Repository, error) { defer trace.StartRegion(ctx, "Scanner.Scan").End() ctx = zlog.ContextWithValues(ctx, From 689bd1b521214aeebb31bcaefca8fd3b0b1ec084 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 21 May 2025 13:16:48 -0500 Subject: [PATCH 29/31] rhel: update bug report URL Signed-off-by: Hank Donnay --- rhel/repositoryscanner.go | 20 +++++++++++++++++++- rhel/repositoryscanner_test.go | 16 ++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/rhel/repositoryscanner.go b/rhel/repositoryscanner.go index b9c747197..6e411c5a7 100644 --- a/rhel/repositoryscanner.go +++ b/rhel/repositoryscanner.go @@ -283,7 +283,7 @@ func (r *RepositoryScanner) Scan(ctx context.Context, l *claircore.Layer) ([]*cl if err != nil { zlog.Warn(ctx). Err(err). - Str("url", `https://bugzilla.redhat.com/enter_bug.cgi?product=Container%20Factory`). + Str("url", bugURL(cpeID, err)). Str("cpeID", cpeID). Msg("invalid CPE, please report a bug upstream") continue @@ -307,6 +307,24 @@ func (r *RepositoryScanner) Scan(ctx context.Context, l *claircore.Layer) ([]*cl return repositories, nil } +// BugURL constructs a link directly to the Red Hat Jira instance. +func bugURL(id string, err error) string { + const desc = "A Clair instance noticed an invalid CPE:{code}%s{code}\nThe reported error was:{code}%v{code}" + v := url.Values{ + "pid": {"12330022"}, // ID for the Red Hat Jira "SECDATA" project. + "issuetype": {"1"}, + "summary": {"invalid CPE in Red Hat data"}, + "description": {fmt.Sprintf(desc, id, err)}, + } + u := url.URL{ + Scheme: "https", + Host: "issues.redhat.com", + Path: "/secure/CreateIssueDetails!init.jspa", + RawQuery: v.Encode(), + } + return u.String() +} + // RepoidsFromContentSets returns a slice of repoids, as discovered by examining // information contained within the container. func repoidsFromContentSets(ctx context.Context, sys fs.FS) ([]string, error) { diff --git a/rhel/repositoryscanner_test.go b/rhel/repositoryscanner_test.go index ced544f75..be2d61d1a 100644 --- a/rhel/repositoryscanner_test.go +++ b/rhel/repositoryscanner_test.go @@ -315,3 +315,19 @@ func TestLabelError(t *testing.T) { t.Errorf("%v != %v", got, want) } } + +func TestBugURL(t *testing.T) { + const in = `cpe:/a:redhat:openshift:4.*` + const want = `https://issues.redhat.com/secure/CreateIssueDetails%21init.jspa?description=A+Clair+instance+noticed+an+invalid+CPE%3A%7Bcode%7Dcpe%3A%2Fa%3Aredhat%3Aopenshift%3A4.%2A%7Bcode%7D%0AThe+reported+error+was%3A%7Bcode%7Dcpe%3A+version%3A+disallowed+character+%27%2A%27%7Bcode%7D&issuetype=1&pid=12330022&summary=invalid+CPE+in+Red+Hat+data` + + _, err := cpe.Unbind(in) + if err == nil { + t.Error("expected error") + } + got := bugURL(in, err) + + t.Logf("\ngot: %s\nwant: %s", got, want) + if got != want { + t.Fail() + } +} From 45d0dd1596e7ae8ec21641ff515661c851372de0 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 18 Jun 2025 11:56:21 -0500 Subject: [PATCH 30/31] bdb: start next iteration when continuing from error return Signed-off-by: Hank Donnay --- internal/rpm/bdb/bdb.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/internal/rpm/bdb/bdb.go b/internal/rpm/bdb/bdb.go index 971afc3bf..3ea7db986 100644 --- a/internal/rpm/bdb/bdb.go +++ b/internal/rpm/bdb/bdb.go @@ -180,6 +180,7 @@ func (db *PackageDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] if !yield(nil, fmt.Errorf("bdb: error reading hashpage: %w", err)) { return } + continue } if h.Type != pagetypeHashUnsorted && h.Type != pagetypeHash { continue @@ -188,6 +189,7 @@ func (db *PackageDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] if !yield(nil, errors.New("bdb: odd number of entries")) { return } + continue } ent := make([]hashentry, int(h.Entries)/2) @@ -196,10 +198,12 @@ func (db *PackageDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] if !yield(nil, fmt.Errorf("bdb: error reading hash entry: %w", err)) { return } + continue } } k := []byte{0x00} + Entry: for _, e := range ent { off := int64(e.Data) // First, check what kind of hash entry this is. @@ -208,6 +212,7 @@ func (db *PackageDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] if !yield(nil, fmt.Errorf("bdb: error peeking page type: %w", err)) { return } + continue } if k[0] != pagetypeHashOffIndex { continue @@ -218,6 +223,7 @@ func (db *PackageDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] if !yield(nil, fmt.Errorf("bdb: error reading hashoffpage: %w", err)) { return } + continue } var r rope for n := offpg.PageNo; n != 0; { @@ -228,6 +234,7 @@ func (db *PackageDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] if !yield(nil, fmt.Errorf("bdb: error reading hashpage: %w", err)) { return } + continue Entry } if h.Type != pagetypeOverflow { continue @@ -245,6 +252,7 @@ func (db *PackageDB) Headers(ctx context.Context) iter.Seq2[io.ReaderAt, error] if !yield(nil, fmt.Errorf("bdb: error adding to rope: %w", err)) { return } + continue Entry } n = h.NextPageNo } From 7f697ad7aa2ef96a7a1079c4eb5aba1dadbc8218 Mon Sep 17 00:00:00 2001 From: Hank Donnay Date: Wed, 18 Jun 2025 11:57:43 -0500 Subject: [PATCH 31/31] bdb: explain short read beavior for "rope" type I saw this and had to re-check why the short read wasn't handled, so this adds a note explaining it. Signed-off-by: Hank Donnay --- internal/rpm/bdb/bdb.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/rpm/bdb/bdb.go b/internal/rpm/bdb/bdb.go index 3ea7db986..f5f42d095 100644 --- a/internal/rpm/bdb/bdb.go +++ b/internal/rpm/bdb/bdb.go @@ -305,9 +305,11 @@ func (r *rope) ReadAt(b []byte, off int64) (int, error) { idx++ if idx != len(r.rd) { rdoff = 0 // Reading from the start, now that we're on the next one. - continue + break // May return EOF or nil on an exact-sized read, so hit the post-switch check. } fallthrough + // Don't need to handle non-EOF short reads because [io.ReaderAt] is documented + // to error on short reads. default: return n, err }