Skip to content

Dive into fixing rpm-md #1127

@cgwalters

Description

@cgwalters

This is and has for a long time been a big problem:

$ du -shc /var/cache/rpm-ostree/repomd/fedora/repodata/48986ce4583cd09825c6d437150314446f0f49fa1a1bd62dcfa1085295030fe9-primary.xml.gz
15M	/var/cache/rpm-ostree/repomd/fedora/repodata/48986ce4583cd09825c6d437150314446f0f49fa1a1bd62dcfa1085295030fe9-primary.xml.gz
15M	total
$ zcat /var/cache/rpm-ostree/repomd/fedora/repodata/48986ce4583cd09825c6d437150314446f0f49fa1a1bd62dcfa1085295030fe9-primary.xml.gz > /tmp/primary.xml
$ du -shc /tmp/primary.xml 
130M	/tmp/primary.xml
130M	total
$ 

It's insane. And the problem is that with rojig ♲📦 even for Atomic Host/Silverblue users who don't use package layering, we'll go back to "download 30+ MB of repodata, uncompress to 100+MB" just to check whether there are any updates at all.

The plus side is us working on this will also benefit containers and traditional, if we can do it right.

One idea I had is to "presolve" - a lot of this data is completely redundant dependencies. Take this chunk from the very first package I looked at, 0ad:

    <rpm:requires>
      <rpm:entry name="libstdc++.so.6()(64bit)"/>
      <rpm:entry name="libstdc++.so.6(CXXABI_1.3)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(CXXABI_1.3.5)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(CXXABI_1.3.8)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(CXXABI_1.3.9)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4.11)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4.14)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4.15)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4.18)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4.19)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4.20)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4.21)(64bit)"/>
      <rpm:entry name="libstdc++.so.6(GLIBCXX_3.4.9)(64bit)"/>
   ...

But those are all provides of the libstdc++ package - and I don't think we're ever going to have different symbol versions provided by separate packages.

So doing a pass where we just drop redundant requires would probably make a notable difference.

Taking that idea slightly farther, do "presolve" - 0ad has a requires on /bin/sh, but that's already going to be a dependency of one of its library dependencies I bet.

A user-visible result of this would be that yum info would no longer show all of the dependencies, but...eh.

Of course another thing to do is simply to split up the repos. For Atomic Host in particular we can omit all of the desktop apps, all of the -devel packages etc.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions