2011-03-20 firefoxで「応答のないスクリプト」エラーを修理?
firefoxでjavascriptの実行エラーを修理してみた
最近、firefoxでyoutubeを見てたらjsの実行エラーらしいダイアログBOXが出るようになって、まともに動画が見れなくなったので修理をしてみた。
gdbで何が起こったのか調べてみた
cuomo@poke ~ $ gdb /usr/bin/firefox
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.gentoo.org/>...
Reading symbols from /usr/bin/firefox...(no debugging symbols found)...done.
(gdb) run
Starting program: /usr/bin/firefox
[Thread debugging using libthread_db enabled]
[New Thread 0x7fffe821b700 (LWP 27839)]
[New Thread 0x7fffe7816700 (LWP 27840)]
gdbを使ってfirefoxを起動しエラーが出るページへアクセスをするとgdbが以下のエラーを吐く
/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libEGL.so.1: cannot open shared object file: No such file or directory
npviewer.binがlibEGL.so.1をロードできないらしいのでその辺を調べてみる
npviewer.binとlibEGL.so.1を調べてみた
エラーが出てるnpviewer.binはfileで調べて見たら32bit、でどのライブラリをリンクしているか調べてみる。
cuomo@poke ~ $ file /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin
/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
cuomo@poke ~ $ ldd -v /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin
...
...
libXfixes.so.3 => /usr/lib32/libXfixes.so.3 (0xf6e57000)
libatk-1.0.so.0 => /usr/lib32/libatk-1.0.so.0 (0xf6e3a000)
libcairo.so.2 => /usr/lib32/libcairo.so.2 (0xf6d4e000)
libpixman-1.so.0 => /usr/lib32/libpixman-1.so.0 (0xf6ce2000)
libEGL.so.1 => not found
libXrender.so.1 => /usr/lib32/libXrender.so.1 (0xf6cd8000)
libxcb.so.1 => /usr/lib32/libxcb.so.1 (0xf6cbd000)
libXau.so.6 => /usr/lib32/libXau.so.6 (0xf6cb9000)
...
libEGL.so.1 => not foundでロードできてない様子。
とりあえず、/usr/lib32にあるlibEGL.so.1を読み込んでるらしいがどのパスから読み込んでるのかstraceで確認してみる。
straceでlibEGL.so.1の読み込み具合を確認
cuomo@poke ~ $ straceでどこのライブラリを読み込んでいるか確認してみる
strace /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin
mprotect(0xf6d8b000, 4096, PROT_NONE) = 0
mmap2(0xf6d8c000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x67) = 0xfffffffff6d8c000
close(3) = 0
open("/usr/lib32/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib32/tls/i686/sse2/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
..
..
open("/usr/lib32/sse2/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib32/sse2", 0xffff5b0c) = -1 ENOENT (No such file or directory)
open("/usr/lib32/libEGL.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib32", {st_mode=S_IFDIR|0755, st_size=36864, ...}) = 0
writev(2, [{"/usr/lib64/nspluginwrapper/i386/"..., 50}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libEGL.so.1", 11}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"\n", 1}], 10/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libEGL.so.1: cannot open shared object file: No such file or directory
) = 161
exit_group(127) = ?
いろいろ読み込んだ挙句に無いと文句を言って終了してしまう。
open("/usr/lib32/libEGL.so.1", O_RDONLY) = -1 を読み込もうとしている。
ところでlibEGL.so.1ってなに?
libEGL.so.1の共有ライブラリのパッケージは何か調べてみると
poke ~ # equery b /usr/lib64/libEGL.so.1.0
[ Searching for file(s) /usr/lib64/libEGL.so.1.0 in *... ]
media-libs/mesa-7.9.1 (/usr/lib64/libEGL.so.1.0)
mesaパッケージに含まれているので/usr/lib32にシンボリックリンクを張ってみた
poke ~ # ls -l /usr/lib32 | grep libEGL
lrwxrwxrwx 1 root root 11 Mar 20 10:30 libEGL.so -> libEGL.so.1
lrwxrwxrwx 1 root root 13 Mar 20 10:29 libEGL.so.1 -> libEGL.so.1.0
でもう一回straceで確認
cuomo@poke ~ $ ldd -v /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin
open("/usr/lib32/libEGL.so.1", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2401\0\0\0\0\0\0"..., 512) = 512
close(3) = 0
stat64("/usr/lib32", {st_mode=S_IFDIR|0755, st_size=36864, ...}) = 0
writev(2, [{"/usr/lib64/nspluginwrapper/i386/"..., 50}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libEGL.so.1", 11}, {": ", 2}, {"wrong ELF class: ELFCLASS64", 27}, {"", 0}, {"", 0}, {"\n", 1}], 10/usr/lib64/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libEGL.so.1: wrong ELF class: ELFCLASS64
) = 131
exit_group(127) = ?
ライブラリは読み込んだものの今度は、libEGL.so.1が64bitなのでダメだという
poke ~ # file /usr/lib64/libEGL.so.1.0
/usr/lib64/libEGL.so.1.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
media-libs/mesaのインストールでは/usr/lib64/libEGL.so.1.0の64bit版がインストールされてるみたいなので、32bitをとりあえず別の32bitのGentooなPCから持ってきて置いてみた。
poke lib32 # cd /usr/lib32/
poke lib32 # rm libEGL.so.1.0 <--- 64bit/usr/lib64/libEGL.so.1.0へのシンボリックリンクを削除
poke lib32 # ls -l | grep libEGL.so
lrwxrwxrwx 1 root root 11 Mar 20 10:30 libEGL.so -> libEGL.so.1
lrwxrwxrwx 1 root root 13 Mar 20 10:29 libEGL.so.1 -> libEGL.so.1.0
rwxr-xr-x 1 root root 62972 Mar 20 10:29 libEGL.so.1.0 <-- 新しく設置した32bit版のlibEGL.so.1.0
poke lib32 # file /usr/lib32/libEGL.so.1.0
/usr/lib32/libEGL.so.1.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
もう一度、/usr/lib64/nspluginwrapper/i386/linux/npviewer.binを実行してみる
cuomo@poke ~ $ /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin
npviewer, NPAPI plugin viewer. Version 1.3.0
usage: /usr/lib64/nspluginwrapper/i386/linux/npviewer.bin [GTK flags] [flags]
-h --help print this message
-t --test check plugin is compatible
-i --info print plugin information
-p --plugin set plugin path
-c --connection set connection path
動いたっぽいのでfirefoxでエラーの出たページを表示してみると治っているっぽい。
こんなのでいいのか?
とりあえず直してみたが、問題はmesaパッケージにあるのか分からない。
GentooのbugzillaにもBug 354943であったが、どうやって修理すればいいのか?
とりあえず動いたからそのまま放置、時間が無いのであとで調べよう。
誰か、分かったら教えてください、よろしく。
- 4 http://www.google.co.jp/
- 2 http://search.yahoo.co.jp/search?p=openindiana+2011&aq=-1&oq=&ei=UTF-8&fr=top_ga1_sa&x=wrt
- 2 http://www.google.co.jp/search?hl=ja&client=firefox&hs=rSB&rls=org.mozilla:ja:official&q=openindiana+インストール&aq=0&aqi=g10&aql=&oq=openindiana+
- 2 http://www.google.co.jp/search?q=gentoo&hl=ja&lr=lang_ja&client=firefox-a&hs=To7&rls=org.gentoo:en-US:unofficial&tbs=lr:lang_1ja,qdr:d&prmd=ivnsfdl&source=lnt&sa=X&ei=TIeGTfutJI_RcfjR_ZkD&ved=0CAwQpwUoAg
- 2 http://www.google.co.jp/search?q=openindiana+vnc&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 2 http://www.google.com/search?client=ubuntu&channel=fs&q=OpenIndiana&ie=utf-8&oe=utf-8
- 1 http://d.hatena.ne.jp/diarylist?of=150&mode=rss&type=public
- 1 http://d.hatena.ne.jp/diarylist?of=50&mode=rss&type=public
- 1 http://d.hatena.ne.jp/mobile
- 1 http://search.yahoo.co.jp/search?p=スクリプトエラー 無料修復&ei=UTF-8&fr=bb_top_v2&x=wrt
