Since Ubuntu 19.04 and Debian 10 the usrmerge package has been installed by default. The package makes symlinks between /bin and /usr/bin, /sbin and /usr/sbin, /lib and /usr/lib and /lib64 and /usr/lib64 ensuring that any file appears in both places. There’s more detail on why this has been done at The Case for the /usr Merge and Understanding the bin, sbin, usr/bin, usr/sbin split.

The downside of this merging is that some packages that write files to both /usr/lib and /lib (looking at you libpng12-0) now fail, because one of the symlinks now effectively point at themselves and cause the install to fail:

The following additional packages will be installed:
The following NEW packages will be installed:
0 upgraded, 1 newly installed, 0 to remove and 2294 not upgraded.
2 not fully installed or removed.
Need to get 0 B/173 kB of archives.
After this operation, 273 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
(Reading database ... 602063 files and directories currently installed.)
Preparing to unpack .../libpng12-0_1.2.50-2+deb8u3_amd64.deb ...
Unpacking libpng12-0:amd64 (1.2.50-2+deb8u3) ...
dpkg: error processing archive /var/cache/apt/archives/libpng12-0_1.2.50-2+deb8u3_amd64.deb (-
 unable to install new version of '/usr/lib/x86_64-linux-gnu/': No such file or directory
Errors were encountered while processing:
E: Sub-process /usr/bin/dpkg returned an error code (1)

The key line being unable to install new version of '/usr/lib/x86_64-linux-gnu/': No such file or directory . If you have an older package that depends on libpng12-0 you’re out of luck unless you can get it installed. So what to do?

There are various solutions floating around, including installing from a 3rd-party PPA, but I didn’t fancy that. It turns out that it’s actually very easy (but only once you’ve read the whole of the internet) to repackage libpng12-0 from the official sources and successfully install it. Here’s what I did:

# Add older sources to your apt list
# If you need a non-Intel version (e.g. arm64) you'll need to use
# instead of 

echo "deb trusty main universe multiverse" | tee -a /etc/apt/sources.list.d/trusty.list
echo "deb trusty-security main universe multiverse" | tee -a /etc/apt/sources.list.d/trusty.list

# pull in the updates
sudo apt update

# Download the original package into /tmp
cd /tmp && apt download -y libpng12-0

# extract it to /tmp/libpng
sudo dpkg-deb -R libpng12-0_1.2.50-1ubuntu2.14.04.3_arm64.deb libpng

# now remove the problematic symlink that causes the error
rm -rf /tmp/libpng/usr/

# and now repackage it
sudo dpkg-deb -b libpng libpng-fixed.deb

# finally install from your fixed package
apt install -y /tmp/libpng-fixed.deb

# Tidy up and remove those old apt sources
sudo rm /etc/apt/sources.list.d/trusty.list

# forget about them
sudo apt update