Zypper up failing

Upgrading a xen machine to 15.4 is failing:

error: unpacking of archive failed on file /boot/xen-4.16.gz;641deeba: cpio: symlink failed - No such file or directory
error: xen-4.16.0_08-150400.2.12.x86_64: install failed

No additional info in zypper.log, or journal, unfortunately, at this point zypper is borked:

zypper ps -s

zypper: symbol lookup error: /usr/lib64/libzypp.so.1722: undefined symbol: _ZN4YAML6detail9node_data12empty_scalarB5cxx11

How can the failed update be unwound? Would also appreciate any ideas on fixing the underlying problem.

  1. What is “a xen machine”?
  2. What you are upgrading it from

A server with Xen installed, … 15.3.2 (latest).

Can we forget for the moment that Xen is installed on it? Then this is just an upgrade from Leap 15.3 to 15.4. Correct?

Then please describe how you are doing this. Remember that you did not give any details about commands used, only the vague description "Upgrading a xen machine to 15.4 ".

Why, … zypper --releasever=15.4 dup, of course. The problem is not in the [one] command, … it is the failure of boot/xen-4.16.gz to unpack/symlink properly. In adition to which the system is now in a state of half an upgrade.

If you are using btrfs, you can revert to previous snapshot.

Unfortunately, too old for BtrFS.

Still need to figure out the root problem “unpacking of archive failed on file /boot/xen-4.16.gz”, … ??

Messages like this can be caused by a corrupt package (whilst downloading). If your system is now in a state that it doesn’t boot anymore (you didn’t describe it clearly), you can upgrade your system by using the upgrade option from an openSUSE Leap 15.4 DVD or USB pen drive…

A liitle bit old but should be valid in general:

Not a corrupt package, unfortunately; the system has been in use for years, so would really like to have a way to isolate the root problem before downing it to do a upgrade install.

How do you know? You say that you tried an upgrade from Leap 15.3 to Leap 15.4
And the failure is definitely on the downloaded xen package for Leap 15.4:

I am in a better mood now. I did not answer to this earlier because it seems to implicate I am a bit thick in the head.

The fact that you only seem to know about one way to do it does not mean that there are no others. And there are.

And your description is far from complete. You only pointed to a way to do it (so we now know what method you choose amongst the possibilities), but did not mention all the steps that are needed to make it a success. Thus it could always be that you made a mistake.

It was not a corrupt package as the files unpacked successfully! Note the error:

symlink failed - No such file or directory

The package files are intact in /boot, … but the install is trying to create a symlink that fails. Nothing in the logs show the details of the symlink.

This is really getting interesting:

Comparing the borked machine with others, I see NO symlinks 
in /boot at all. Trying to create a symlink crashes:

root@MainserverRR:/boot (-bash)
# ln -s xen-4.14.5_04-150300.3.32.gz /boot/xen.tgz
ln: failed to create symbolic link '/boot/xen.tgz': 
  Operation not permitted

Turns out the /boot partition was actually created vfat:

/dev/sda1      vfat       2091000    428460   1662540  21% /boot

Whereas a vfat partition SHOULD be /boot/efi:

/dev/sdd1      ext3          494244     115632      352552  25% /boot
/dev/sdb1      vfat          520936       4968      515968   1% /boot/efi

The borked system  is booting  legacy, so the efi directory should 
not have been created at all, ..  instead /boot was created vfat!!

How to convert /boot from vfat to ext3 without blowing up the install?

Some distros do mount the EFI partition at “/boot” – for example, KaOS does that.

To change:

  • Backup the content of “/boot”. I would use “tar” for that.
  • Unmount. Format as “ext3” (with “mkfs”), or perhaps as “ext2”.
  • Restore from the backup.
  • Fix “/etc/fstab”. If mounting by UUID, you will need to fix that. And you will need to change to “ext3” (or “ext2” or whatever).
  • Run Yast bootloader to reinstall booting (just change something, like change the timeout by 1 second and it will reinstall).