37

When I type

sudo apt-get install r-base-core

I get the following error

The following packages have unmet dependencies. r-base-core : Depends: libc6 (>= 2.29) but 2.27-3ubuntu1 is to be installed

Now libc6 as far as I understand is an important library which should not be removed.

So how to upgrade from the current version (2.27) to any version >= 2.29?

3 Answers3

15

Disclaimer:
Some reported that their systems crashed after using this answer.
So anyone who is trying this, please be careful and make sure you create backups before trying it.


To my knowledge, libc6 2.29 is the latest version. And it is available for Ubuntu 19.04 (link).

If you want to install libc6 amd64, open this link to download it, then open the download folder in the terminal and run sudo dpkg -i libc6_2.29-0ubuntu2_amd64.deb

If you want to install libc6 i386, you can download it from this link, then open the download folder in the terminal and run sudo dpkg -i libc6_2.29-0ubuntu2_i386.deb


EDIT 06/01/2020:

As per now, libc6_2.29 does not exist anymore. However libc6_2.30 and lib6_2.31 are available via this link (2.31 is the official version for Ubuntu 20.04).
If you want to download a different version than the official one supported by your Ubuntu release (i.e 2.27 for 18.04, 2.30 for Ubuntu 19.10 ...) check this link.

Download the version that suits you, then open the download folder and run sudo dpkg -i <the_file_name>.

singrium
  • 7,320
7

Don't do it. Here I'll leave an image of how dependent are your software packages on libc6 compiled for that specific library!!! https://sites.google.com/view/dependency-netwok/.

There you'll see a star shaped network and the node at the center (green colored) represents libc6. I suggest two possible solutions to your problem:

1. Add a compatible repository

Since it is r-base-core what you want, change the repository to a compatible one for your specific distribution.

For example: deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/

In your /etc/apt/sources.list file. By using you will be automatically be redirected to a nearby CRAN mirror. See https://cran.r-project.org/mirrors.html for the current list of CRAN mirrors.

sudo apt-get update
sudo apt-get install r-base
sudo apt-get install r-recommended

2. Upgrade

Another solution would be to upgrade your entire distribution to a more recent and compatible with what you want.

alper
  • 224
AlfCano
  • 81
0

The people saying "don't do it" are absolutely correct. I have tested this extensively. The issue is that your all of your distro's packages in your repositories all depend on the current libc6 you have.

Why it Doesn't Work

The difference between versions is great because of the ABI signatures and the symbol offsets/lookups. First off, the function names may look the same, but their real name may have a decorator in which case they wouldn't be. Secondly, libraries have tokens for verification (in this case the GLIBC version). If the tokens don't match, the program wont use it. You can try to force it, but then you will run into symbol lookup errors. Such a thing is a brick maker(tm).

During my testing, I would end up with one of the following:

  • A system that is half-broken (boots to emergency, then have to coax it into startup using ninja shell techniques)
  • A system that is fully-broken (the dreaded grub emergency prompt, no way in unless you reinstall or patch it from a live disc)
  • A very unstable system that inexplicably crashes or kernel taints easily
  • An awful combination of the above

The Right Solution

If your program needs a certain c6, you should install it on a system with the correct version THEN make an AppImage (or other similar package) of it, so you can run it without issue. AppImage will run your program in a sandbox, which is one advantage of it. There is also snap and flatpak.

The only other alternatives are using virtualbox+another version of Linux with your c6 target on it, or setting it up on another machine and using ssh to run it instead. These are a pain though and only worth it for larger programs.