Emacs 起動せず - libpangoft2-1.0.so.0: Undefined symbol "hb_buffer_set_cluster_level"

弊サイト Web サーバとして運用している FreeBSD 10.1-RELEASE 上でいつの間にか多言語テキストエディタ Emacs24 が起動できなくなっていた。出たエラーは次のとおり。

/usr/local/lib/libpangoft2-1.0.so.0: Undefined symbol "hb_buffer_set_cluster_level"

Emacs24 を Version 24.5.1 にアップグレードしてみる。sudo pkg upgrade emacs24。Emacs24 とともに,いくつもの前提パッケージがインストールされた。しかし,これでもダメ。同じエラーが出る。フォントの描画用ライブラリである Pango が hb_buffer... の名前を解決できないという。Pango はすでに最新版になっていたので,そのバージョンアップで復旧できるわけではなさそうだった。

Google でヒットしたページ http://unix.stackexchange.com/questions/235012/problem-with-gtk-application-s に,OpenSuSE(ドイツ製 Linux ディストリ)の AcrobatReader でこのエラーに遭遇したとの報告があった。libharfbuzz をアップグレードしたら解決したと書かれていた。harfbuzz パッケージは OpenType フォントのテキストレイアウトエンジンである。

そこで,sudo pkg upgrade harfbuzz を実行し,harfbuzz をアップグレードした。これでオッケーになった。

pkg audit -F 投入によって,脆弱性のあるパッケージを検査し,それで報告された問題パッケージをアップグレードしているうちに,Emacs24 とその前提ライブラリの版との同期が取れなくなっていた。要するに,ライブラリをアップグレードしたとき,それを前提とするパッケージが古いバージョンを参照していたために新しいバージョンにリンクできず動作しない事態が起きていた。今回の問題の要因はここにある。FreeBSD pkg システムも依存関係の追従には限界があるようである。本来なら libpango がアップグレードされたら自動的に libharfbuzz もアップグレードしてもらいたいが,それがなされていなかった。Emacs24 のほかにも動かなくなってしまったプログラムがあるかも知れない。ま,そのときはそのときで。

20160320-emacs.png