元々このマシンはMicrosoft Windows Vistaがインストールされていました。OSをNetBSDにしましたが、使い勝手を同等にしようと考えていたので、その意図を満たせるアプリケーションを入れていました。そのひとつがKeePassです。Microsoft WindowsではIDMを使っていましたので、代替ソフトとしてKeePassを選んでみました。KeePass以外にも、KeePassXやKeePassXCがあることを承知していますが、IDMの代替ソフトを探していた当時はpkgsrcにKeePassXCが入っていませんでした。KeePassXは機能的に満足せず、消去法でKeePassを選択しました。
KeePassはC#で書かれているそうです。NetBSDではMonoという実装を使っており、あまり具合が良くありません。特に問題なのが、pkgsrcからのビルドでトラブルを起こすことです。また実行中におちたりしますが、これはMonoが悪いのか、マシンの環境の何かの不具合なのか見極められていません。KeePass自体は悪くないと思うのですが、Monoにはうんざりしていました。ありがたいことにpkgsrcにはKeePassXCが入っているので、KeePassからKeePassXCに乗り換えることにしました。
KeePassXCを起動しようとしたら、次のようなエラーが出て動きません。調査しようと思って先延ばしにしていましたが、実は同じエラーがwiresharkでも出ていました。
/usr/pkg/qt5/lib/libQt5XcbQpa.so.5: Undefined PLT symbol "FT_Get_Font_Format" (symnum = 407)
この問題を解決しようとWebに情報を求めましたが、解決に至るような情報を見つけられませんでした。念のために、いつものように、/usr/bin/lddで共有ライブラリの参照状況を確認してみましたが、参照不能はありませんでした。しかし参照状況が怪しいものが見つかりました。freetype.17を参照しようとしてlibfreetype.so.18を見にいっています。
-lfreetype.17 => /usr/X11R7/lib/libfreetype.so.18libfreetype.soは/usr/X11R7/libにあるので確認してみました。するとlibfreetype.so.18のリンク先がlibfreetype.so.17.4.11になっています。
lrwxr-xr-x 1 root wheel 22 May 23 2016 /usr/X11R7/lib/libfreetype.so -> libfreetype.so.17.4.11このシンボリックリンクは、何時頃のことなのか記憶に定かではありませんが、自分で作りました。何かのアプリケーションがlibfreetype.so.18を必要としており、このようにリンクを張ったら動作したので、それで解決したと思っていました。それが今頃になって悪さをしているようです。
lrwxr-xr-x 1 root wheel 22 May 23 2016 /usr/X11R7/lib/libfreetype.so.17 -> libfreetype.so.17.4.11
-r--r--r-- 1 root wheel 589796 May 23 2016 /usr/X11R7/lib/libfreetype.so.17.4.11
lrwxrwxr-x 1 root wheel 22 Jul 7 14:34 /usr/X11R7/lib/libfreetype.so.18 -> libfreetype.so.17.4.11
それでは本物のlibfreetype.so.18は何処にあるのでしょうか。調べてみるとNetBSD 8.0が提供するxbase.tgzに含まれているようです。考えてみると、このマシンにNetBSDを導入した時はNetBSD 7.0.1でした。その時はlibfreetype.so.17だったのでしょう。その後にソースからビルドしたNetBSD 8.99系に更新しましたが、X関係は手付かずのままだったようです。
障害の原因は見えてきたので、NetBSD 8.0に含まれているX関係コンポーネントを全て入れることで、NetBSD 7.0.1時代のX関係コンポーネントを上書きしました。これでkeepassxcが動くことを確認しました(wiresharkも)。
lrwxr-xr-x 1 root wheel 22 Jul 17 2018 /usr/X11R7/lib/libfreetype.so -> libfreetype.so.18.0.13
lrwxr-xr-x 1 root wheel 22 May 23 2016 /usr/X11R7/lib/libfreetype.so.17 -> libfreetype.so.17.4.11
-r--r--r-- 1 root wheel 589796 May 23 2016 /usr/X11R7/lib/libfreetype.so.17.4.11
lrwxr-xr-x 1 root wheel 22 Jul 17 2018 /usr/X11R7/lib/libfreetype.so.18 -> libfreetype.so.18.0.13
-r--r--r-- 1 root wheel 613332 Jul 17 2018 /usr/X11R7/lib/libfreetype.so.18.0.13
これまでNetBSDの更新は/usr/srcでビルドして入れ換えていましたが、/usr/xsrcは何もしていませんでした。X関係を更新するのがNetBSDのメジャー番号が上がった場合だけで良いなら、今回同様にキットから展開すればよいでしょう。それともソースからビルドして入れ換える必要があるのか、調べておきたいと思います。
0 件のコメント:
コメントを投稿