Cent の Yum さんが Segmentation fault と言ってきたときの対処方法
Cent の Yum さんが癇癪を起してしまったら
症状
$ sudo yum upgrade
$ sudo yum upgrade
とかやろうとすると、 Segmentation Fault とか怒鳴り散らしてこっちの仕事を邪魔してくる.
もしくは セグメンテーション違反です とか言って罵ってくる.
1. 常套手段
RPM DB をクリアして、改めてキャッシュしてもらう
$ sudo rm -rf /var/lib/rpm/__db.* && sudo rpm --rebuilddb && sudo yum clean all && sudo yum makecache
RPM の DB クリアして、リビルドして、yum さんの短期記憶も消して、もう一回記憶を作り直す.
2. 上記でも SegFault ってなった場合
インストール済みの Zlib をアンインストールする (特に 1.2.5 の場合はこれで直る)
$ sudo rpm -qa | grep zlib
まずバージョン確認. 1.2.5 とかなってたらバージョンダウンしておきましょう.
zlib-1.2.5-xx.el6.x86_64
zlib-devel-1.2.5-xx.el6.x86_64
その後、zlib さんがどこにいるか確認して抹殺します.
自分で make install
したんなら、そこで make uninstall
でとりあえずアンインストール.
$ cd /usr/local/bin/zlib1.2.5/
$ make uninstall
あとはもう一回 zlib-1.2.3 をインストールすれば OK.
番外として、これは RPM インストールした場合の探し方.
何故 RPM で 1.2.5 をインストールしたんでしょう….
$ sudo rpm -ql zlib
/lib64/libz.so.1
/lib64/libz.so.1.2.5
/usr/share/doc/zlib-1.2.5
/usr/share/doc/zlib-1.2.5/ChangeLog
/usr/share/doc/zlib-1.2.5/FAQ
/usr/share/doc/zlib-1.2.5/README
ふむ、こんな感じ.
あとは
$ sudo yum remove zlib
とかで削除して、もう一回
$ sudo yum install zlib
とかすると宜し.
標準外のリポジトリを使わなければ、大体 1.2.3 とかがインストールされるはず. されなかったらバージョン指定してインストールしてください.
3. そもそも zlib のインストールなんかしてなかったし、確認したら zlib-1.2.3 だった人向け.
実はこの記事を書こうとしたきっかけ.
この場合、yum.log にも出てないし、どうしろってんだとお手上げの人が多い.
もったいない!
strace コマンドを使う.
strace --V
って打っても使えない人は
$ sudo yum install strace
$ strace -V
strace -- version 4.5.19
で OK.
strace で何をするのか
yum upgrade のプロセスを監視しましょ.
strace yum upgrade
これだけで OK. 簡単でしょ?
なんかものすごい勢いで文字が出てきますが、必ずどっかで停止します.
そうするとどうでしょう、以下のような感じで出力されていませんか?
fstat(11, {st_mode=S_IFREG|0644, st_size=10240, ...}) = 0
lseek(11, 24, SEEK_SET) = 24
read(11, "\0\0\0\10\0\0\0\n\0\0\0\0\0\0\0\0", 16) = 16
fstat(11, {st_mode=S_IFREG|0644, st_size=10240, ...}) = 0
access("/var/cache/yum/x86_64/6/mod-pagespeed/primary.xml.gz.sqlite-wal", F_OK) = -1 ENOENT (No such file or directory)
fstat(11, {st_mode=S_IFREG|0644, st_size=10240, ...}) = 0
fcntl(11, F_SETLK, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}) = 0
futex(0x7f2bfd845fa0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
gettimeofday({1419945996, 413547}, NULL) = 0
stat("/var/cache/yum/x86_64/6/mod-pagespeed/primary.xml.gz", {st_mode=S_IFREG|0644, st_size=6276, ...}) = 0
stat("/var/cache/yum/x86_64/6/mod-pagespeed/primary.xml.gz", {st_mode=S_IFREG|0644, st_size=6276, ...}) = 0
stat("/var/cache/yum/x86_64/6/mod-pagespeed/primary.xml.gz", {st_mode=S_IFREG|0644, st_size=6276, ...}) = 0
open("/var/cache/yum/x86_64/6/mod-pagespeed/primary.xml.gz", O_RDONLY) = 12
lseek(12, 0, SEEK_CUR) = 0
read(12, "\37\213\10\10\0\0\0\0\2\377/auto/chromeclient/bui"..., 8192) = 6276
read(12, "", 1916) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
セグメンテーション違反です
おっと.
mod_pagespeed でコケてるのが分かりましたね.
これは自分の場合でしたが、皆さんの環境の抱える問題によって様々な結果が出てくると思います.
結局今回は /etc/yum.repos.d/mod_pagespeed.repo が悪さをしていた(enable=1のままだった)のが原因だったので、 enable=0 にして再度 yum upgrade
を試してみたら問題なく upgrade が出来るようになりました.
4. 結論
結構こういうところで詰まってる人も多いですが、基本中の基本をば.
「自分で追加した yum リポジトリは、標準で enable=1 にしないこと. 必要な時、必要なものだけを --enablerepo オプションで追加する」
それでは良きエンジニアライフを(^w^)ノシ
Author And Source
この問題について(Cent の Yum さんが Segmentation fault と言ってきたときの対処方法), 我々は、より多くの情報をここで見つけました https://qiita.com/sirone/items/e1b331efb6e7f97cc476著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .