Bug ID 1185731
Summary libzstd1.rpm is compressed with itself, or Bumpy Road from RPM 4.12
Classification openSUSE
Product openSUSE Tumbleweed
Version Current
Hardware x86
OS openSUSE Tumbleweed
Status NEW
Severity Normal
Priority P5 - None
Component Upgrade Problems
Assignee screening-team-bugs@suse.de
Reporter giecrilj@stegny.2a.pl
QA Contact jsrain@suse.com
Found By ---
Blocker ---

Background: RPM 4.16 requires libzstd1, which is a new library.  However, the
package introducing the library is compressed with the very library that it
purports to install, creating a vicious cycle.

WARNING: DO NOT TRY THIS AT HOME!!!

When upgrading with YaST2 and RPM 4.12, you cannot install anything but RPM
itself.  All other packages are zstd1-compressed and thus malformed.  You can
ignore the uncompressing errors, in which case you end up with a non-functional
RPM: it requires libzstd1 which has not been installed.

Moreover, libzstd1 will not work without a newer glibc.  Not even rpm2cpio
loads.

So you have to install locally glibc (NOT INTO THE NORMAL LOCATION FOR IT),
libzstd1 and liblua from the initrd image of a network installer.  Since the
new glibc is incompatible with ld-linux.so, you need to invoke the new
ld-linux.so directly.

IF YOU INSTALL GLIBC INTO THE NORMAL LOCATION, YOU WILL NOT BE ABLE TO RUN
BASIC TOOLS LIKE rm, I.E. THERE WILL BE NO WAY BACK!!!

Under these circumstances rpm still fails but the call of { env
LD_LIBRARY_PATH=��������� ���������/ld-linux.so rmp2cpio; } is likely to succeed; use this to
extract the CPIO archive of glibc, libzstd1 and liblua.  Use { cpio -i ���������; } to
install them into the normal location.  You can run { rpm; } now; it will
convert bdb to ndb first.

The rest is about a hundred packages you need to explicitly install with { rpm
-i ���������; } (as zypper is still broken).  Which packages are needed depends on
which packages you have installed.  All of them must be installed in one run,
mainly because they require the new glibc either directly or indirectly.  Some
of them can be installed onto the old glibc (you already have the new one but
rpm thinks you have the old one) but most of them are not.  This includes PERL,
python ruby and all packages that require them.  You also have to manually
delete scores of packages that require those scripting languages, including the
whole of YaST2 itself.  RPM cannot figure out it reinstalls YaST2 because
storage-ng is not a replacement for storage (or so I think).  Of course, there
are YaST2 packages, like inetd, that are obsolete and need to be removed by
hand anyway.

At this point, you can proceed with zypper because it works again.

A funny detail is that you have to remove xscreensaver because pam_unix does
not explicitly replace pam-modules.

I think much of this tinkering could be avoided if the basic packages were not
zstd1-compressed (at least, if zypper could pick up a version that is not).


You are receiving this mail because: