5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Solved] relocation error: /lib64/libc.so.6: symbol _dl_starting_up 解決法

Last updated at Posted at 2019-05-10

起こったこと What happened

Cent OS6 にyumでNode.js をインストールしようとしたら、
依存関係エラーが出て、入らなかったので、
試行錯誤したら、危うく全データを失うところだった。

なんとか幸運にも回避できたので、メモ。

GLIBC の依存関係

$ yum install nodejs
--> Finished Dependency Resolution
Error: Package: 2:nodejs-12.2.0-1nodesource.x86_64 (nodesource)
           Requires: libc.so.6(GLIBC_2.17)(64bit)

libc.so.6 のバーションが違うらしい。
試行錯誤していたら、
以下ln コマンドの後、以降(ほぼ全ての)コマンド操作ができなくなってしまった。

$ ln -sf /lib64/libc-2.17.so /lib64/libc.so.6
$ ls
ls: relocation error: /lib64/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference

ほぼ全てのコマンドで。
(この状態で、ログアウトしアクセスを失うと、もはやOS再インストールしかないよう。)

$ curl
Segmentation fault (core dumped)

(core dumped) 詰んだ?

どうやら、ほとんどのコマンドが /lib64/libc.so.6 に依存しているようであり、
マシン環境に合わないものにSymbolic link がすり替わってしまったため。

/lib64/libc-2.17.so に対応する GIBC_2.17 がない
コンパイルして入れればよさそうだ

$ strings /lib64/libc.so.6 | grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE

解決法 Solution

とりあえず、緊急なので
もし元のファイル(ここでは/lib64/libc-2.12.so) があるなら
以下のようにして戻せる。
(LD_PRELOAD="/lib64/libc-2.12.so" 指定の後にコマンド実行)

LD_PRELOAD="/lib64/libc-2.12.so" ln -sf /lib64/libc-2.12.so /lib64/libc.so.6  #-f で上書きforce

例えば (ログインセッション中でなら)

$ export LD_PRELOAD="/lib64/libc-2.12.so" 
$ ls
hoge boo bar ..

たまたま、(幸運にも)解決方法を見つけたからよいけど、
もし見つけられなかったら、全データを消すことになっていた。

同じような誰かに役立てば幸いだ。

Note: Never logout/restart kernel!
It will not launch again then.

It seems Symlink of GlibC is wrong.

I hope this will help :)

GLIBC_2.17 をCentOS6 にコンパイルする

方法があったので
やってみる

$ wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm
$ wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm
$ wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm
$ wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm

$ sudo rpm -Uvh glibc-2.17-55.el6.x86_64.rpm \
glibc-common-2.17-55.el6.x86_64.rpm \
glibc-devel-2.17-55.el6.x86_64.rpm \
glibc-headers-2.17-55.el6.x86_64.rpm  --force --nodeps # force する

$ strings /lib64/libc.so.6 | grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE

# GLIBC_2.13 以降増えた

$ LD_PRELOAD="/lib64/libc-2.17.so" ls # 問題なく動くよう
hoge 

$ ln -sf /lib64/libc-2.17.so /lib64/libc.so.6 # 新しく入れたのにsymlink貼り替え
# 念の為、いくつかterminal でログインしてsession確保した状態で

動いた

結局

node.js については、
ソースコードからcompileすれば、使えた。 node.jsは、NVM 経由でインストールが手軽。

NVM install
https://tecadmin.net/install-nodejs-with-nvm/

$ rm -f /etc/yum.repos.d/nodesource-el* # 最新のrpmが入っている場合、消す。
$ curl -sL https://rpm.nodesource.com/setup_7.x | bash -
$ yum install nodejs
$ node --version
v10.15.3

追記

CentOS6 とか古いOS だとyum update で勝手に /lib64/libc.so.6 更新されて
この現象が起きるもよう
注意。

参考

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?