Introduction
Previously, in Ubuntu 18.10 and prior you could install every dependency in any variety of Ubuntu systems without issues. With the release of 19.04, and probably because of libpng16-16 this isn't so much a possibility anymore due to issues with installing from Debian package binaries which include libpng12-0:i386.
If you cannot give up your Ubuntu system for some reason and wish to use the latest and greatest versions of it, a fix for libpng12-0 is probably never coming, but a way to work around it is available.
Explanation of method
As libpng12-0:i386 isn't conventionally installable, we'll have to work around apt and force it to accept a fake package of the same name. To do this, we'll use a utility for Debian systems and the actual package to be installed in conjunction to juke apt and force it to do something a bit insane otherwise.
Required files
You can download the library files necessary for installation of libpng12-0 from one of these two locations:
https://packages.ubuntu.com/xenial/libpng12-0
https://packages.debian.org/jessie/libpng12-0
You will also need ZSNES 1.42. Short of grabbing the files from zsnes.com and compiling it yourself, you can download an installable copy of the emulator here:
http://ftp.iinet.net.au/pub/ubuntu-archive/pool/multiverse/z/zsnes/zsnes_1.420-2ubuntu1_i386.deb
In your terminal, you will want to use sudo with your system's archive manager, to open either of the archives, and just leave it there; It will be used later.
Approaches of completion
Once you have all of the required files, you can pick from one of two options:
The do it now option
Download this fake copy of libpng12-0:i386 from GitHub and install it. After, attempt to install ZSNES 1.42; It should work. (Tested on a fresh copy of Ubuntu 19.10 via USB.)
The DIY option
If you don't trust pre-fabricated packages from unofficial sources around the Internet (No blame there) but don't feel like compiling from source anything, then perform the following in a 32-bit Debian system instead:
equivs-control with anything after it will generate a package with whatever name you gave it. This can be different from the version identifier. Further, don't end it with .deb.
Open the control file you made with equivs-control in your preferred text editor, then open DEBIAN/control from the archive for libpng12-0:i386 and copy the contents of libpng12-0:i386 control into the control file you made.
Of the modifications based upon the original control file for the one you had created, the following is what was done to produce the file you would had downloaded from above anyway:
Once finished, reboot into your instance of more recent Ubuntu then attempt to install it.
What should happen
Either way, the process of installing the fake libpng12-0:i386 should pull in libc6:i386 and zlib1g:i386 along with it. If this isn't the case, the you may have to download and install those files individually, as well. (And all of the other dependencies zsnes:i386 needs to function.)
Actually installing libpng12-0:i386
So right, you installed the fake package, but the files still aren't there. The thing to do now is to open your file manager with sudo and within there, navigate to /usr/lib.
Once there, in the archive manager with the Debian package binary for libpng12-0:i386 opened navigate to /usr/lib and copy its instance of i386-linux-gnu into your local filesystem instance of /usr/lib.
Then, attempt to run zsnes. If you did everything right, then ZSNES 1.42 wiill open and you get to enjoy the last version of ZSNES with netplay functionality in the most recent instance of Ubuntu.
Previously, in Ubuntu 18.10 and prior you could install every dependency in any variety of Ubuntu systems without issues. With the release of 19.04, and probably because of libpng16-16 this isn't so much a possibility anymore due to issues with installing from Debian package binaries which include libpng12-0:i386.
If you cannot give up your Ubuntu system for some reason and wish to use the latest and greatest versions of it, a fix for libpng12-0 is probably never coming, but a way to work around it is available.
Quote
Note: The system must already be installed. I've attempted to confirm my findings in a live session and the means to download packages from the Ubuntu package archives are not available there. (I am sure I could had worked around it but didn't feel like learning more than I had to.)
Explanation of method
As libpng12-0:i386 isn't conventionally installable, we'll have to work around apt and force it to accept a fake package of the same name. To do this, we'll use a utility for Debian systems and the actual package to be installed in conjunction to juke apt and force it to do something a bit insane otherwise.
Required files
You can download the library files necessary for installation of libpng12-0 from one of these two locations:
https://packages.ubuntu.com/xenial/libpng12-0
https://packages.debian.org/jessie/libpng12-0
You will also need ZSNES 1.42. Short of grabbing the files from zsnes.com and compiling it yourself, you can download an installable copy of the emulator here:
http://ftp.iinet.net.au/pub/ubuntu-archive/pool/multiverse/z/zsnes/zsnes_1.420-2ubuntu1_i386.deb
In your terminal, you will want to use sudo with your system's archive manager, to open either of the archives, and just leave it there; It will be used later.
Quote
Unless you want to buiild your own package, however. If you would rather do that, then at least the command will be in your history if your shell is configured to have a command history. (It usually is.)
Approaches of completion
Once you have all of the required files, you can pick from one of two options:
The do it now option
Download this fake copy of libpng12-0:i386 from GitHub and install it. After, attempt to install ZSNES 1.42; It should work. (Tested on a fresh copy of Ubuntu 19.10 via USB.)
The DIY option
If you don't trust pre-fabricated packages from unofficial sources around the Internet (No blame there) but don't feel like compiling from source anything, then perform the following in a 32-bit Debian system instead:
- sudo apt install equivs
- equivs-control [pkgname]
equivs-control with anything after it will generate a package with whatever name you gave it. This can be different from the version identifier. Further, don't end it with .deb.
Open the control file you made with equivs-control in your preferred text editor, then open DEBIAN/control from the archive for libpng12-0:i386 and copy the contents of libpng12-0:i386 control into the control file you made.
Of the modifications based upon the original control file for the one you had created, the following is what was done to produce the file you would had downloaded from above anyway:
- Change version from 1.2.8.to 1.2.9 (Probably unnecessary but did it anyway)
- Comment out (#) installed size (it's unnecessary)
- Comment out conflicts (Potential issue prevention)
- Comment out replaces (Potential issue prevention)
- equivs-build [pkgname]
Once finished, reboot into your instance of more recent Ubuntu then attempt to install it.
What should happen
Either way, the process of installing the fake libpng12-0:i386 should pull in libc6:i386 and zlib1g:i386 along with it. If this isn't the case, the you may have to download and install those files individually, as well. (And all of the other dependencies zsnes:i386 needs to function.)
Actually installing libpng12-0:i386
So right, you installed the fake package, but the files still aren't there. The thing to do now is to open your file manager with sudo and within there, navigate to /usr/lib.
Once there, in the archive manager with the Debian package binary for libpng12-0:i386 opened navigate to /usr/lib and copy its instance of i386-linux-gnu into your local filesystem instance of /usr/lib.
Then, attempt to run zsnes. If you did everything right, then ZSNES 1.42 wiill open and you get to enjoy the last version of ZSNES with netplay functionality in the most recent instance of Ubuntu.
Slightly well-versed on everything Linux | I'll beta-test your hack. Find me here! |