サーバーで、メーリングリストシステムを動かしています。
先日まで問題なく動いていたはずのCMLメーリングリストが、今日になって突然、
[MailingList:0] No title in original.
というタイトルで届きました。タイトルの通し番号は 0 になっているし、タイトルも “No title in original” となり、投稿者のタイトルが完全に消されています。
私が使っているCML のバージョンは CML 4.0 で、CML はShell ベースで作られているため、ほぼ Unix の標準コマンドだけで動作するありがたいツール。リストが遅いメールサーバーを含んでいると配信に時間が掛かるという弱点(MLのせいじゃなくて sendmail の仕様による)もありますが、動作が軽く身内規模で使う小規模メーリングリストには重宝しています。
今回の症状は、過去、gawk を入れ忘れた時に見られた症状で経験済み。新規サーバーに OS をインストールし、CML を引っ越し(再インストールせず、旧サーバーからコピーしたケース)したものの、gawk まだ入れていない状態で、CMLを起動すると「gawk 入れ忘れた〜」となります。gawk だけはオプションなので。
FreeBSD を pkg コマンドでメンテナンスすると、何かのタイミングで必要なライブラリが消されれてしまうというケースがしばしば起こります。昨日までは動いていたコマンドが突然エラーで動かなくなるというトラブルで顕在化して、あ〜、コマンドが消えてる!ってなるわけです。
今回もその症状で、過去の経験から gawk を消されてしまった!と考えたのですが、
> ll /usr/local/bin/gawk -rwxr-xr-x 2 root wheel 519188 9月 13 19:58 /usr/local/bin/gawk
gawk あるじゃない!あれれ。
何かコマンドが消えているはずなのに、それが何かわからない。gawk 以外はUnix 標準コマンドで動いているはずなので、ports 管理とは関係ないですから。
確か、CML にはデバッグモードがあったはずで、それで確認しようと思ったものの、デバッグモードの使い方を思い出せない。
ふと、gawk が壊れた?という思いが頭をよぎりました。
直接、gawk コマンドを動かしてみよう!とヘルプを表示させようとタイプしてみると、
> gawk -h Shared object "libsigsegv.so.2" not found, required by "gawk"
依存関係があるライブラリがないだって!しかし、libsigsegv って何?
こういう時は /usr/ports/lang/gawk の下で make を実行してみると、ソースレベルで依存関係の再インストールが始まりますのでわかりやすい。結果は、次のようになり devel に含まれるパッケージだとわかりました。
====> Compressing man pages (compress-man) ===> Installing for libsigsegv-2.10_1 ===> Checking if libsigsegv already installed ===> libsigsegv-2.10_1 is already installed You may wish to ``make deinstall'' and install this port again by ``make reinstall'' to upgrade it properly. If you really wish to overwrite the old port of libsigsegv without deleting it first, set the variable "FORCE_PKG_REGISTER" in your environment or the "make install" command line. *** [check-already-installed] Error code 1 Stop in /usr/ports/devel/libsigsegv. *** [lib-depends] Error code 1 Stop in /usr/ports/lang/gawk.
エラーを見てわかるとおり、libsigsegv は pkg 管理ではインストール済みということになっていますが、実際には存在しません。何かの理由で消されてしまったんでしょう。こういうところは、まだ pkgng ツールが完全ではない証拠。
原因がわかったので後は簡単。
まず、libsigsegv を削除。依存関係で gawk も一旦一緒に消えます。
# pkg delete libsigsegv Checking integrity... done (0 conflicting) Deinstallation has been requested for the following 2 packages (of 0 packages in the universe): Installed packages to be REMOVED: libsigsegv-2.10_1 gawk-4.1.4 Number of packages to be removed: 2 The operation will free 3 MiB. Proceed with deinstalling packages? [y/N]: y [1/2] Deinstalling gawk-4.1.4... [1/2] Deleting files for gawk-4.1.4: 100% [2/2] Deinstalling libsigsegv-2.10_1... [2/2] Deleting files for libsigsegv-2.10_1: 0% libsigsegv-2.10_1: missing file /usr/local/include/sigsegv.h [2/2] Deleting files for libsigsegv-2.10_1: 20% libsigsegv-2.10_1: missing file /usr/local/lib/libsigsegv.a [2/2] Deleting files for libsigsegv-2.10_1: 40% libsigsegv-2.10_1: missing file /usr/local/lib/libsigsegv.so [2/2] Deleting files for libsigsegv-2.10_1: 60% libsigsegv-2.10_1: missing file /usr/local/lib/libsigsegv.so.2 [2/2] Deleting files for libsigsegv-2.10_1: 80% libsigsegv-2.10_1: missing file /usr/local/lib/libsigsegv.so.2.0.3 [2/2] Deleting files for libsigsegv-2.10_1: 100%
missing file ….. となっているので、パッケージに含まれるファイル丸ごと消されていたみたいです。
続いて、gawk を再インストール。依存関係で、libsigsegv も自動的にインストールされます。
# pkg install gawk Updating FreeBSD repository catalogue... FreeBSD repository is up-to-date. All repositories are up-to-date. The following 2 package(s) will be affected (of 0 checked): New packages to be INSTALLED: gawk: 4.1.4 libsigsegv: 2.10_1 Number of packages to be installed: 2 The process will require 3 MiB more space. 10 KiB to be downloaded. Proceed with this action? [y/N]: y Fetching libsigsegv-2.10_1.txz: 100% 10 KiB 10.0kB/s 00:01 Checking integrity... done (0 conflicting) [1/2] Installing libsigsegv-2.10_1... [1/2] Extracting libsigsegv-2.10_1: 100% [2/2] Installing gawk-4.1.4... [2/2] Extracting gawk-4.1.4: 100% Message from libsigsegv-2.10_1: ==== Note that the stackoverflow handling functions of this library need procfs mounted on /proc. ====
これで、CML が復活しました。
メーリングリストがガンガン稼働している時じゃなくて良かったです。