FreeBSDアップデート後にSegmentation faultでApache + phpが起動しない問題を解決してみた!

2022年6月12日
iOS iPadOS macOS Unix Windows インターネット プログラミング・開発

皆さん、こんにちは。

昨今はサーバーやサーバーの機能もAWSなどのCloudサービスで利用することができるようになり、サーバーの一部の機能だけが必要ならばDockerなども利用できます。

そんな中、いまだ私は自分でサーバーを構築し、CUI(コマンドラインインターフェース)で開発や日常利用しているのですが、そんなタイプの人もだいぶ絶滅危惧種になってきたように思います。とは言えCloudサービスなどもバックエンドでは何かしらのサーバーが構築され稼働しているわけで、トレンドな仕事の実務では必要性が下がったとしても、技術自体は今後も必要となることでしょう。

プログラミングもNo Code(複雑なコードを使用せず用意されたパーツを組み合わせるような方法)で開発できる仕組みが増えてきましたが、こちらも、コアな開発ではNo Codeというわけにはいきませんから、自律的にプログラミングできるAIが普及するまでは、人間のプログラマー、あるいは、AIとプログラマーが協調しながら開発していくのかと思います。

ところでサーバー系OSというと、Windows Serverや、Linux系ならばRed HatやCent OS、Ubuntuなどが一般的ですが、私はMotrola社のCPUであるMC68030やMC68040のような、いわゆる68Kと呼ばれたMacで動く「NetBSD」に魅了されて以降、自分で利用するサーバー系OSはBSD系のものをメインに利用しています。

BSD系OSと言えば、その一部の技術を継承しているmacOS、もっと言えば、iOSやiPadOSもBSD系OSの流れを汲んでいます。BSDとは「Berkeley Software Distribution」の略で、アメリカの大学であるカリフォルニア大学バークレー校のグループを中心に開発され、その後、ベル研究所で採用・開発が続き、サーバー系OSとして広く普及する「Unix」としての礎を築いてきました。

前述のNetBSDはその派生OSで、他にはOpenBSDや、macOSの基礎となったDarwin、そして、現在私が使用しているFreeBSDなどへと派生し開発が続けられています。ちなみにmacOSは「Mac OS 8」の時代に「Copland」と呼ばれるマルチタスクなモダンOSが開発されていましたが、経営難と開発陣の統制の問題から計画は頓挫、その後、Appleに戻ってきたスティーブ・ジョブズが自身のコンピューター会社であったNeXT社のOS「NeXTSTEP(OPENSTEP)」をMac OSに取り込み、「Rhapsody」と名付けられ、Darwin(Mac OS X Server)の流れを汲む現在のmacOSへと進化し今に至っています。

「マルチタスク」と、さらっと説明してしまいましたが、一般向けコンピューターのOSが複数のタスクを同時にこなせるようになったのは、2000年頃の話で、それもはじめは上記のMac OS X ServerやWindows 2000などのサーバー系OSに限られていました。コンピューターのOSとしては、BSDのようなUnix系OSは初期の頃からマルチタスクが前提で開発されていましたので、AppleはCopland計画失敗後、NeXTSTEPやBSDなどのUnix系OSの技術を利用して先進的なマルチタスクのGUI OSをリリースしたのです。一方、MicrosoftはWindows NT系のOSを順当に進化させ、Windows 2000以降はNTとの融合が進み、(本稿執筆時点で)現行のWindows 11は、モダンOSとして完成したOSの一つになりました。

ちなみに、先のNetBSDは有志の開発者がMacで動作するようにしているだけですが、Appleは1988年から1995年の間に「A/UX」というUnixベースのサーバー向けOSをリリースしています。それは、現在のmacOSのようにバックエンドでUnixが動作しながら、フロントエンドではMac OSと同様のGUIが動くという画期的なOSでした(シェアは少なく、当時でもほとんど知られていませんでしたが)。

話がややそれましたが、いまではGUI(グラフィカルユーザーインターフェース)が当たり前になったコンピューターも、私の使うFreeBSDのようなサーバー系OSでは、CUI(コマンドラインユーザーインターフェース)で使用する人がほとんどです。なぜかと言えば、マウスカーソルでの操作が割と洗練されてきたとは言え、CUIに慣れているとキーボードで入力した方が操作が速いと思える場面も多々あり、サーバーを管理する場合は大抵、グラフィカルな見た目の無い文字だけの世界でコンピューターを操作するからです(分かりやすく言えば、映画の世界でハッカー役の人がコマンドをカチャカチャ入力しているようなアレです)。

OSのアップデートなども基本はコマンドで行うのですが、私はここ最近アップデートをさぼりすぎていたため、使用しているFreeBSDサーバーを最新バージョンにメジャーアップデートしたところ、ウェブサーバーであるApacheだけが起動しないという問題にハマってしまいました。OSアップデート後のトラブルは大体毎回発生するので慣れてはいますが、当たり前のように動くと思っていたApacheの不具合で、かつ、検索してもなにも解決策が得られなかったので今回はやや焦ってしまった次第です。

問題は、Apacheでphpを動かすためのmod_phpということはすぐにわかったのですが、Apache自体やphpを何度コンパイル/アップデートし直しても、起動時に「exited on signal 11 (core dumped)」とエラーを吐き落ちてしまいます。

結論としては、理由が解明できなかったものの解決できました、笑。

2つのサーバーで同じ現象になりましたので再現性のある不具合なのですが、一方は私以外の人が利用しているサービスも動いていたこともあり、やむなく別のVPSに同じ環境を一から構築して解決。

もう片方は色々試しつつ一日頭を抱えていましたが、portsでのコンパイルをやめて、pkgコマンドでのインストールに切り替えたところ、不具合が解消しました。Apache、php、mod_phpをpkgインストールしたところ、core dump(Segmentation fault)しなくなりましたが、pkgインストールではphpの一部の機能が有効にならなかったため、php関連のみportsからconfigファイルを作り直しインストールをやり直しています。

portsは細かくコンフィギュレーションできるのですが、時々依存関係が崩れたり、他のプログラムやライブラリの問題で不具合が生じるので、pkgでインストールすることで欠けていた必要ファイルが補完されたのではないかと思います。ちなみに「portmaster -a」でインストール済みのportsを全アップデートしましたが、解決はしていません。

前置きが長くなりながら、あっさりとしたトラブルシューティングとなってしまいましたが、海外のフォーラム等でも全く解決方法がありませんでしたので、もし同様のトラブルで困っている方に参照いただければ良いと思いシェアしてみました(尚、不具合のあったサーバーはこのサイトが動いている環境です、笑)。


ENTRY LIST

DJ Streaming on Twitch

コーダー/プログラマーのための電子書籍ハウツー: そろそろブログやSNSじゃなくて、本にまとめてみたら?

続・成功するフリーランス – 年収1000万円は簡単に実現できる: フリーランスを15年やってみてわかったこと

木を食べる: 花粉症・ダイエット・健康食品・食糧革命への福音書

思春期の男の子を持つ、お母さんのための処方箋: 「いいからやりなさい!」って言ってませんか?