Compilation on Debian Wheezy [stable] - glibc 2.13


#1

I try to compile atom from scratch for Linux Debian Wheezy.

I followed the instructions on:

compilation did not show issues and I was able to create a Debian package [atom-0.95.0-amd64.deb]

However, the atom generated binary produced unfortunately is somehow still looking for a different version of the glibc.
Debian Wheezy is 2.13 and it is looking for 2.14 or 2.15.

Can you please point me in the right direction so I can produce a binary which will use the 2.13 glibc ?

The message when running the atom binary:

./atom: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.14' not found (required by ./atom) ./atom: /lib/x86_64-linux-gnu/libc.so.6: versionGLIBC_2.14’ not found (required by /tmp/atom-build/Atom/libchromiumcontent.so)
/atom: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15’ not found (required by /tmp/atom-build/Atom/libchromiumcontent.so)

As Ivan from support kindly indicated, It seems that this problem was already reported on Atom’s repository here:

Some suggestion was made to update the glibc, this is not recommended by Debian
In other words, I can’t change the existing glibc 2.13 of Debian Wheezy, it is a stable environment in production.

Given that I am compiling atom from source, why I am not getting a binary compatible with glibc 2.13 ?

I understand the atom product was probably built on an OS with glibc 2.14 or 2.15, however, unless you are using specific functions from 2.14 or 2.15 which will fail the binary to build, I don’t see a reason why it should not execute linking to the glibc 2.13 [it is compiled on the glibc 2.13 system]

Is there a modification I could make on the source or compile options somewhere ?

I am more than happy to give it a try and the solution will be posted on a Debian afficionado blog.

There are plenty of Debian Wheezy users out there who would love to give atom a try.

Please help :slight_smile:
Can’t wait to try atom

Kind regards,

Stephane


#2

Well, I have received no reply so far in order to get a proper version of Atom on Debian Wheezy 7.5 using the provided glibc 2.13 hence not disturbing a proper production system.

My good friend Nulld1g1t did it for me !

Send him an polite email on nulld1g1t[at]yourprog[dotcom] and he will probably prepare something for you.

You can also check out his Linux blog for fun [he knows the images are missing due to a upgrade - he will sort it out soon]

http://www.yourprog.com

Cheers


#3

Check out the long screencast of Nulld1g1t, everything is there to compile atom native on your Linux system:
"Nulld1g1t compiles Atom for Debian Wheezy 7.5 64bit STABLE !!!"
watch in 1080p fullscreen:


#4

If you want to use the latest version of Atom as fetched by a fresh “git clone…”, yet not compromising a stable debian system, there is a way which I describe here. The steps are undeniably a bit more difficult than a “dpkg -i…” but they are easy and only needed once (except for step 4 which should be executed for each new build/install of the .deb package).

Please, note that the textual length of the steps are due to the verbosity I chose to give them. In fact, they are rather simple and short. For the impatient just skip the text and execute the commands, peeking at the text only when necessary to make the commands clearer.

So, here goes:

Step 1. Normal installation of the latest atom version from github:

Follow the instructions as outlined at Atom’s github repository (after installing the .deb package, it is normal not to be able to launch Atom). After building the .deb package and successfully installing it, you can use the script/clean script to clean up the unnecessary files.

Step 2. Safe installation of an acceptable version of eglibc as used by debian:

Assuming that the SVN client has been installed the following process is painless and quick (I found the following steps when I was looking for a solution at http:// www. reddit.com/ r/debian/comments/20mqd9/glibc_214_on_wheezy/):

sudo mkdir /opt/eglibc-2.19
sudo chown -R youruser:youruser /opt/eglibc-2.19
mkdir -p ~/tmp
cd ~/tmp
svn co svn://svn.eglibc.org/branches/eglibc-2_19 eglibc-2.19
cd eglibc-2.19
mkdir build
cd build
../libc/configure --prefix=/opt/eglibc-2.19 --enable-kernel=X.Y.Z # please, read below
make -j4
make install

Explanation of the X.Y.Z of the …/libc/configure step:

In order to be sure that the dynamic linker produced by the above will use the correct libraries, you should also specify the ABI version to use for the library. Since we are compiling it with the --prefix option, the ABI will be se to something lower than the one in the “normally” installed libc (see http://stackoverflow.com/questions/20577638/library-path-order-for-alternate-glibc-dynamic-linker-ld-so). As such, in order to produce the correct ordering in /opt/eglibc-2.19/etc/ld.so.cache, for the new dynamic linker, we need to specify the current ABI version as is the one in the normal libc.so.X, in our normal library path. In order to find the X.Y.Z for above, you can issue the following command:

file /lib/x86_64-linux-gnu/libc-2.13.so

This outputs something like:

/lib/x86_64-linux-gnu/libc-2.13.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), BuildID[sha1]=0x08fce74425eb57654fe6af8ed4e5e57115f86de4, for GNU/Linux 2.6.26, stripped

The ABI version we need is 2.6.26, so the above becomes --enable-kernel=2.6.26

Step 3. Fix the new eglibc installation so that when using it’s dynamic loader, the rest of the libraries are found correctly:

Since the /opt/eglibc-2.19/etc/ld.so.conf does not exist by default you should create it placing the new /opt/eglibc-2.19/lib path at the top and then rest of the library paths as per the files in /etc/ld.so.conf.d/*.conf files.

nano /opt/eglibc-2.19/etc/ld.so.conf
       /opt/eglibc-2.19/lib
       # here, list all the other library paths as found in the
       # .conf files of your /ect/ld.so.conf.d/*.conf files
/opt/eglibc-2.19/sbin/ldconfig -v 
    # without sudo for extra security and since we own the /opt/eglibc-2.19
    # file hierarchy and we shouldn't need to use sudo

Step 4. Patching /usr/share/atom/atom:

The last but most important step will allow invoking /usr/share/atom/atom (which is invoked when simply typing atom in the terminal) and any sub process it spawns, using the new dynamic linker under /opt. The steps are very easy to follow and are as such:

  1. download patchelf from http://nixos.org/patchelf.html
  2. untar, cd, ./configure, make and make install (it is painless)
  3. run the command: “patchelf --set-interpreter /opt/eglibc-2.19/lib/ld-2.19.so /usr/share/atom/atom”

From now on, simply running “atom” in the terminal should run atom without issues. If desired you can update the atom git repository and re-run the build/mkdeb cycle. The only extra step after every update is step 4 (patching /usr/share/atom/atom), for which a simple script can be created and run after each build/mkdeb cycle.

P.S.: Please, excuse my ommitting/mangling some urls but as a new user I cannot post more than two links in a post.


#5

First of all, thanks for the great guide sadesyllas. Sorry for bumping a post this old but I feel like this post can be relevant and useful for people trying to follow the guide.

Two problems occurred during the installation process for me and I will provide solutions for them. I am running Wheezy as well.

First problem, eglibc-2.19 does not compile, saying that the ld version is too old. It seems that on my system uses the Gold linker /usr/bin/ld.gold by default, check if this is the case by typing ls -l ld* to see if ld is a symbolic link to ld.gold. The makefile to compile eglibc cannot extract the proper version of ld if gold is used and in my case even if it could, the gold linker version was too old.
Solution : A simple fix for this is to temporarily change ld to be a symbolic link to ld.bfd.
Warning : Be sure to restore the original linker after compilation! For this, before configuration of eglibc, follow the steps

sudo mv /usr/bin/ld /usr/bin/ld_restore_me sudo ln -s /usr/bin/ld.bfd /usr/bin/ld ../libc/configure --prefix=/opt/eglibc-2.19 --enable-kernel=X.Y.Z # Replacing X, Y Z as explained above make -j4 sudo rm /usr/bin/ld sudo mv /usr/bin/ld_restore_me /usr/bin/ld

Second problem, atom runs but modules listing packages and themes fail. I assumed this is something new compared to the older version of atom that the guide was written for. In fact, this is due to the node executable using the old ELF interpreter that comes with the older libc version.
Solution : Simply change the ELF interpreter for the node executable as well. Simply type (potentially with a sudo)

patchelf --set-interpreter /opt/eglibc-2.19/lib/ld-2.19.so /usr/share/atom/resources/app/apm/bin/node

Alright, now you should have the latest atom running on your older Debian system! Cheers.