Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the vendor, summary, install time and size properties from the RP… #17

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ func run() error {
fmt.Println("Packages:")
for _, pkg := range pkgList {
fmt.Printf("\t%+v\n", *pkg)
// {Epoch:0 Name:m4 Version:1.4.16 Release:10.el7 Arch:x86_64}
// {Epoch:0 Name:zip Version:3.0 Release:11.el7 Arch:x86_64}
// {Epoch:0 Name:m4 Version:1.4.16 Release:10.el7 Arch:x86_64 Vendor:CentOS Summary:The GNU macro processor Size:525707 InstallTime:1556442601}
// {Epoch:0 Name:zip Version:3.0 Release:11.el7 Arch:x86_64 Vendor:CentOS Summary:A file compression and packaging utility compatible with PKZIP Size:815173 InstallTime:1556442604}
// ...
}
fmt.Printf("[Total Packages: %d]\n", len(pkgList))
Expand Down
77 changes: 77 additions & 0 deletions pkg/gen_testcase.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#!/bin/bash

getListing() {
_pkgdbdir="`pwd`/pkg.$$"
rm -rf "$_pkgdbdir"
mkdir "$_pkgdbdir"
cp "$1" "$_pkgdbdir/Packages"
rpm -qa --dbpath "$_pkgdbdir" --queryformat "\{%{EPOCH}, \"%{NAME}\", \"%{VERSION}\", \"%{RELEASE}\", \"%{ARCH}\", \"%{VENDOR}\", \`%{SUMMARY}\`, %{SIZE}, %{INSTALLTIME}\},\n" | sed "s/^{(none)/{0/g" | sed "s/(none)//g" | sed "s/^/ /g"
rm -rf "$_pkgdbdir"
}

cat << EOT
package rpmdb

var (
// docker run --rm -it centos:6 bash
// rpm -qa --queryformat "\{%{EPOCH}, \"%{NAME}\", \"%{VERSION}\", \"%{RELEASE}\", \"%{ARCH}\", \"%{VENDOR}\", \"%{SUMMARY}\", %{SIZE}, %{INSTALLTIME}\},\n" | sed "s/(none)/0/g"
CentOS6Plain = []PackageInfo{
`getListing "Packages_centos6_plain"`
}

// docker run --rm -it centos:6 bash
// yum groupinstall -y "Development tools"
// rpm -qa --queryformat "\{%{EPOCH}, \"%{NAME}\", \"%{VERSION}\", \"%{RELEASE}\", \"%{ARCH}\", \"%{VENDOR}\", \"%{SUMMARY}\", %{SIZE}, %{INSTALLTIME}\},\n" | sed "s/^{(none)/{0/g" | sed "s/(none)//g"
CentOS6DevTools = []PackageInfo{
`getListing "Packages_centos6_dev_tools"`
}

// docker run --rm -it centos:6 bash
// yum groupinstall -y "Development tools"
// yum install -y rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
// yum install -y audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel java-devel
// yum install -y ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
// yum install -y net-tools bc
// rpm -qa --queryformat "\{%{EPOCH}, \"%{NAME}\", \"%{VERSION}\", \"%{RELEASE}\", \"%{ARCH}\", \"%{VENDOR}\", \"%{SUMMARY}\", %{SIZE}, %{INSTALLTIME}\},\n" | sed "s/^{(none)/{0/g" | sed "s/(none)//g"
CentOS6Many = []PackageInfo{
`getListing "Packages_centos6_many"`
}

// docker run --rm -it centos:7 bash
// rpm -qa --queryformat "\{%{EPOCH}, \"%{NAME}\", \"%{VERSION}\", \"%{RELEASE}\", \"%{ARCH}\", \"%{VENDOR}\", \"%{SUMMARY}\", %{SIZE}, %{INSTALLTIME}\},\n" | sed "s/(none)/0/g"
CentOS7Plain = []PackageInfo{
`getListing "Packages_centos7_plain"`
}

// docker run --rm -it centos:7 bash
// yum groupinstall -y "Development tools"
// rpm -qa --queryformat "\{%{EPOCH}, \"%{NAME}\", \"%{VERSION}\", \"%{RELEASE}\", \"%{ARCH}\", \"%{VENDOR}\", \"%{SUMMARY}\", %{SIZE}, %{INSTALLTIME}\},\n" | sed "s/^{(none)/{0/g" | sed "s/(none)//g"
CentOS7DevTools = []PackageInfo{
`getListing "Packages_centos7_dev_tools"`
}

// docker run --rm -it centos:7 bash
// yum groupinstall -y "Development tools"
// yum install -y rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
// yum install -y audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel java-devel
// yum install -y ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
// yum install -y net-tools bc
// rpm -qa --queryformat "\{%{EPOCH}, \"%{NAME}\", \"%{VERSION}\", \"%{RELEASE}\", \"%{ARCH}\", \"%{VENDOR}\", \"%{SUMMARY}\", %{SIZE}, %{INSTALLTIME}\},\n" | sed "s/^{(none)/{0/g" | sed "s/(none)//g"
CentOS7Many = []PackageInfo{
`getListing "Packages_centos7_many"`
}

// docker run --rm -it centos/python-35-centos7 bash
// rpm -qa --queryformat "\{%{EPOCH}, \"%{NAME}\", \"%{VERSION}\", \"%{RELEASE}\", \"%{ARCH}\", \"%{VENDOR}\", \"%{SUMMARY}\", %{SIZE}, %{INSTALLTIME}\},\n" | sed "s/^{(none)/{0/g" | sed "s/(none)//g"
CentOS7Python35 = []PackageInfo{
`getListing "Packages_centos7_python35"`
}

// docker run --rm -it centos/httpd-24-centos7 bash
// rpm -qa --queryformat "\{%{EPOCH}, \"%{NAME}\", \"%{VERSION}\", \"%{RELEASE}\", \"%{ARCH}\", \"%{VENDOR}\", \"%{SUMMARY}\", %{SIZE}, %{INSTALLTIME}\},\n" | sed "s/^{(none)/{0/g" | sed "s/(none)//g"
CentOS7Httpd24 = []PackageInfo{
`getListing "Packages_centos7_httpd24"`
}
)
EOT

21 changes: 21 additions & 0 deletions pkg/package.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ type PackageInfo struct {
Size int
License string
Vendor string
Summary string
InstallTime uint64
Modularitylabel string

BaseNames []string
Expand Down Expand Up @@ -133,6 +135,25 @@ func getNEVRA(indexEntries []indexEntry) (*PackageInfo, error) {
return nil, xerrors.Errorf("failed to read binary (size): %w", err)
}
pkgInfo.Size = int(size)
case RPMTAG_SUMMARY:
if ie.Info.Type != RPM_I18NSTRING_TYPE {
return nil, xerrors.New("invalid tag summary")
}
pkgInfo.Summary = string(bytes.TrimRight(ie.Data, "\x00"))
if pkgInfo.Summary == "(none)" {
pkgInfo.Summary = ""
}
case RPMTAG_INSTALLTIME:
if ie.Info.Type != RPM_INT32_TYPE {
return nil, xerrors.New("invalid tag install time")
}

var installtime int32
reader := bytes.NewReader(ie.Data)
if err := binary.Read(reader, binary.BigEndian, &installtime); err != nil {
return nil, xerrors.Errorf("failed to read binary (installtime): %w", err)
}
pkgInfo.InstallTime = uint64(installtime)
}

}
Expand Down
Loading