6

While trying to fix an issue with Python, I accidentally blew away my libz.so.1 binary by symlinking over it. Now a bunch of stuff, including apt-get won't work. The damage is limited to just libz.so.1 (which was pointing to libz.so.1.2.8) so I should be able to fix it by just finding the x86_64 binary and dropping it back in place, but all I can find is the source and I can't get that to compile. I'm on Xenial. Where can I find a compiled binary?

  • you tried, "sudo apt install --fix-missing" ? where is this file located on HD? I can post a copy for you – Joshua Besneatte May 14 '18 at 2:24
  • Yeah, apt relies on it, so it gives me apt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory It's in /lib/x86_64-linux-gnu/libz.so.1.2.8 – bdetweiler May 14 '18 at 2:26
  • is the original file there? can you create a new symlink? – Joshua Besneatte May 14 '18 at 2:35
8

The correct way to fix this problem is to download needed package by hand, then install or extract it to the system. Of course you can perform such actions from LiveCD/LiveUSB.

How to solve such problems:

  1. Visit packages.ubuntu.com.
  2. Enter missed file name in Search the contents of packages (in our case libz.so.1.2.8) specifying target Distribution (xenial in our case) and CPU Architecture (amd64):

    search options

  3. Click Search, it will show the results page:

    search results

  4. Then click on the zlib1g link

  5. In Download section click amd64:

    download <code>zlib1g</code>

  6. On opened page select nearest mirror, (copy link or download deb-file by browser)

    mirror

    wget http://mirrors.kernel.org/ubuntu/pool/main/z/zlib/zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb
    
  7. Try to install downloaded package to the system:

    sudo dpkg -i zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb
    

    If it does not work - extract it directly to filesystem:

    sudo dpkg -x zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb /
    
  8. And then for sure reinstall it with APT:

    sudo apt-get install --reinstall zlib1g
    
| improve this answer | |
  • 1
    This may need to be done from a Live CD, as dpkg will probably fail as well. – fkraiem May 14 '18 at 9:45
  • 1
    It is hard to broke dpkg, I have repaired many systems with broken apt with my method. dpkg was alive, but apt/apt-get was broken. Just tested on VM - removed libz with rm libs, then rebooted - dpkg works, apt is broken. – N0rbert May 14 '18 at 9:55
  • 2
    Well it is easy to get a list of the libraries dpkg needs: ldd /usr/bin/dpkg. Indeed libz is not among them, but there are some. – fkraiem May 14 '18 at 13:22
  • Nice one, N0rbert! – Organic Marble Aug 2 '18 at 4:22
  • 1
    Yes, dpkg was broken too, on my Ubuntu 18. Like all Internet connections (LAN and WiFi, ip-config-unavailable in /var/log/syslog), archiver, and other system tools. So, I download the file according this answer via LiveCD, then unpack deb, copied libz.so.1 to /usr/local/lib my hdd, after reboot and dpkg -i ... and apt-get --reinstall ...... – bl79 Jan 28 '19 at 9:33
3

An extension to N0rbert's instructions, if you are doing this in a live session, make sure you are extracting the package to the root of your broken Ubuntu install, as opposed to the root of the live session itself (which won't solve anything and will disappear upon restart).

From the POV of the live session, your broken install will be mounted at something like /media/ubuntu/ae7r0-9s90s-ejf8d-d9d9f (not actual value, but some long hash similar to that). You may have to browse to it in the file explorer to get the folder to appear.

So in the live session you'd extract using a command such as the following:

sudo dpkg -x zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb /media/ubuntu/ae7r0-9s90s-ejf8d-d9d9f/

Once the missing libz.so.1 is restored to /media/ubuntu/ae7r0-9s90s-ejf8d-d9d9f/lib/x86_64-linux-gnu/, you should be able to restart, run sudo apt-get install --reinstall zlib1g in tty1, and reboot into a working system again.

| improve this answer | |
-1

Ok, since I blew the original file away, I couldn't apt or even unzip or use rpm or alien. I was able to find an RPM'd version but I couldn't get the binary out because none of the tools that rely on compression worked. So I uploaded the RPM to Convertio and converted it to a tar, downloaded it and extracted it and put it back where it belongs.

Sheesh, lesson learned, be careful with those shared libs!

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.