2011年1月11日火曜日

app-i18n/atokx3-r6 にアップデートしたら xterm とか urxvt が起動できなくなった

去年の10月くらいに発生したんだけど、先日正常な動作に戻ったのでメモっておく。
色々調査してくださった @matsuu せんせいには感謝。


事象

  • app-i18n/atokx3-r5 から app-i18n/atokx3-r6 にアップデートする
  • xterm を起動する→途中で止まる


原因
/usr/lib32/iiim/xiiimp.so, xiiimp.so.2 が本来であれば xiiimp.so.2.0.0 にリンクが張られているべきところが自分自身にリンクが張られていた。

lrwxrwxrwx 1 root root 25  1月  8 23:11 /usr/lib32/iiim/xiiimp.so -> /usr/lib32/iiim/xiiimp.so
lrwxrwxrwx 1 root root 27  1月  8 23:11 /usr/lib32/iiim/xiiimp.so.2 -> /usr/lib32/iiim/xiiimp.so.2

なんでこんな事になってしまうんだろう、と調査してたところ、このバグが見つかった。
ここに書かれている通りではないが、次のように pym/portage/__init__py を変更してみたところ正常にインストールされるようになり、xterm も起動できるようになった。

def abssymlink(symlink):
         "This reads symlinks, resolving the relative symlinks, and returning the absolute."
         mylink=os.readlink(symlink)
         if mylink[0] != '/':
-                mydir=os.path.dirname(symlink)
+                mydir = "."
                 mylink=mydir+"/"+mylink
-         return os.path.normpath(mylink)
+         return os.path.abspath(mylink)

このバグか!!1と発見したときは喜んだモノの、もう少し調べてみたところ、
/usr/lib64/iiim が /usr/lib32/iiim へのリンクになっていた。

/usr/lib64/iiim を削除して再インストールしてみたら、問題は出なくなった。
なんで、こんなリンクが張られたかについては判っていない。

atokx3-3.0.0-r5.ebuild:
135     # amd64 hack
136     if use amd64 ; then
137         if [ "$(ABI=x86 get_libdir)" != "$(get_libdir)" ] ; then
138             dosym /usr/$(ABI=x86 get_libdir)/iiim /usr/$(get_libdir)/iiim || die
139             dosym /usr/$(ABI=x86 get_libdir)/libiiimcf.la /usr/$(get_libdir)/libiiimcf.la || die
140             dosym /usr/$(ABI=x86 get_libdir)/libiiimp.la /usr/$(get_libdir)/libiiimp.la || die
141         fi
142     fi
138行目あたりでリンク貼られてるので、この辺かなーと思ったんだけど当時使ってた portage のバージョンに戻してやってみたけど再現しなかった。