「Ubuntu14.04 64bit」でWineがクラッシュ!昨日まで普通に使えていたのに、なぜ!?
puttyを起動しようとアイコンをダブルクリックしても何も応答がない。おいおい、ちょっと、おにぃーさん。サーバメンテ出来んじゃないですか。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

ライブラリをさわるので、最悪、システムが起動しなくなる(私は最初はまりましたよ)危険性を十分に考慮してください。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

ログを見ると。

# dmesg

[ 147.375805] wineserver[2945]: segfault at c99202d0 ip 00000000c99202d0 sp 000000007db73220 error 14 in ld-2.19.so[7fb6c991f000+23000]

”wineserver segfault ld-2.19.so”や”segfault ld-e.19.so wineserve segfault”でgoogle先生にお尋ねしてもそれらしいものがヒットしません。

そもそもsegfault(セグメンテーション違反:許可されないメモリーアクセス)が発生している事自体かなり厄介そうです。

手当をする前に、用心のバックアップです。

ユーザのルートディレクトリで

$ cp -R ./.wine ./.wine-bk

Ubuntuのデフォルトのパッケージはwine1.6系ですが、wineの最新バージョンは1.7系があります。

以前はそれを使っていましたが、なぜだか1.6系に戻っていました。おそらくシステムを入れ替えた時にデフォルトのままインストールして使っていたからでしょう。

ダメ元で、

Wine for Ubuntu and Ubuntu flavors

を参考に1.7系のwineをインストールしました。

$ wine –version
wine-1.7.44

バージョンは、1.7.44です。

しかし、症状は改善せず、変化なしでした。

一応、元のwine1.6系に戻しました。

次にとった行動は?

wineが動作している、別のUbuntu機(64bit)からld-2.19.soをコピーして移植するというもの。そんな単純じゃないとは思いつつもなんとかせんとイカンという焦りから、つい安易な方法を実行しました。

# locate ld-2.19.so
/lib/i386-linux-gnu/ld-2.19.so
/lib/x86_64-linux-gnu/ld-2.19.so
/lib32/ld-2.19.so
/usr/lib/debug/lib/x86_64-linux-gnu/ld-2.19.so

ld-2.19.soの場所を確認し、SDカードにコピーし、それを問題のUbuntu機に移植します。

ポイントは、問題のUbuntu機にログインした状態でコピーしたld-2.19.soを移植できないので、すでに元のld-2.19.soがシステムによってロックされているらしく、コピーするとエラーが発生します。

したがって、LiveCDで問題のUbuntu機を起動し、システムがインストールされているパーティションをマウントします。といっても、デスクトップ左端に表示されているハードディスクのアイコンのうちシステムが入っているパーティションのやつをダブルクリックするだけです。

$ sudo nautilus

root権限でnautilusを起動し、先ほどコピーしたld-2.19.soを移植します。元のld-2.19.soはリネームします。例えばld-2.19.so.bkなど。コピーと名前の変更はnautilus上で行いました。

次に、実行権を与えます。

$ sudo chmod a+x /media/ubuntu/2fbd…(マウントされたハードディスクのUUID)/lib/i386-linux-gnu/ld-2.19.so
$ sudo chmod a+x /media/ubuntu/2fbd…(マウントされたハードディスクのUUID)/lib/x86_64-linux-gnu/ld-2.19.so
$ sudo chmod a+x /media/ubuntu/2fbd…(マウントされたハードディスクのUUID)/lib32/ld-2.19.so
$ sudo chmod a+x /media/ubuntu/2fbd…(マウントされたハードディスクのUUID)/usr/lib/debug/lib/x86_64-linux-gnu/ld-2.19.so

さて、どうでしょうか問題のUbuntu機を再起動しputtyを起動してみます。残念、何も変化なし。puttyは起動しません。

$ dmesg

あれ?wineserver segfault ld-2.19.soの表示がない!でも、puttyは起動しない。まぁ、セグメンテーション違反はないのでよしとしよう。(自己満足)

そこで、wineはコマンドでも実行できるので、puttyの実行ファイルがあるディレクトリ内で

$ wine puttyjp.exe

とやると、

/usr/bin/wine: No such file or directory

と表示される。あれ?wineがないと?

しかし、実際には存在している。どうもwineを実行するライブラリが壊れている感じがする。

そこで、

$ cd /usr/bin && ldd wine

wineのライブラリの依存関係を見ることにしたら、

「動的実行ファイルではありません」

????まぁ、ライブラリがないのかきちんと読み込まれないのかダメ元で、ia32とlibcを再インストールしてみることに。

Synapticを起動し

ia32とlibcを検索し関連するファイルすべてに再インストールフラグを付けて「適用」ボタンを押下した。
ia32は2つしかなかったのでチェックはすぐに終わったが、libcは多数存在するので、下図のように「S」をクリックしてインストール済みを上の方に集めてからチェックを付けていった。それでも、5分近くはかかったかな。

Screenshot from 2015-07-31 19:48:10

赤枠内のSをクリックする

動作確認

$ cd ./putty-0.64-jp20150301/
$ wine puttyjp.exe

下図の通りに起動しました。

Screenshot from 2015-07-31 19:55:59

コマンドから起動した

もちろん、実行ファイルをダブルクリックしても起動しました。(wineに関連付けられていない時は下図のように右クリックで実行させます。)

Screenshot from 2015-07-31 20:05:13

アイコンから起動させる

無事に、puttyとWinSCPが戻ってきて一安心。でも、なぜ、突然使えなくなったは不明だ。