2014/02/15(土)FreeBSD 10 上で Apache 2.4.7 やPHP は動作しない?
2017/10/12 17:06
具体的には Apache 2.4.7 + mod_perl 2.0.8(スタティックリンク) + PHP 5.5.9
という組み合わせ。
Apache 2.4 において、mod_perl は公式には使えないですが、Apache 2.4 用にパッチを充てているため、使用可能にしております。
FreeBSD 10.0R の openssl バージョンは 1.0.1e が組み込まれています。
蛇足ですが、openssl のこのバージョンではブラウザ側さえ対応すれば、ネームベースのバーチャルセキュアSSLサーバが提供できるようになります。(普及の足を引っ張っているのは IE なわけだが・・)
まず、clang 環境で構築すると、mod_perl ライブラリをリンクするところで、原因不明の「シンボルが未定義っす。。」みたいなメッセージをかなり大量に吐いてコケます。つまり、「使えそうに無い」のです。
Apache 2.4.7 単体、あるいは動的リンクだと clang 環境でも構築可能かもしれませんが、こちらでは未検証です。
ならば、gcc 環境を強制すればいいのですが、環境変数 CC を gcc に設定するだけでは駄目で、mod_perl 側の Makefile をコンパイル前に書き換える必要があります。
mod_perl のトップディレクトリにて、
perl -pi -e 's/CC = cc/CC = gcc/' Makefile perl -pi -e 's/CC = cc/CC = gcc/' */Makefile perl -pi -e 's/CC = cc/CC = gcc/' */*/Makefile perl -pi -e 's/CC = cc/CC = gcc/' */*/*/Makefile perl -pi -e 's/LD = cc/LD = gcc/' */Makefile perl -pi -e 's/LD = cc/LD = gcc/' */*/Makefile perl -pi -e 's/LD = cc/LD = gcc/' */*/*/Makefile perl -pi -e 's/\tcc \-E/\tgcc \-E/' Makefile perl -pi -e 's/\tcc \-E/\tgcc \-E/' */Makefile perl -pi -e 's/\tcc \-E/\tgcc \-E/' */*/Makefile perl -pi -e 's/\tcc \-E/\tgcc \-E/' */*/*/Makefileのようにして、コンパイラ gcc 使用を強制させる必要があります。
(このままでは、デフォルトコンパイラ clang 使用が強制されるため)
ところがこのようにして構築しても、Apache 2.4.7 + mod_perl を起動させても、
表示はハングしてしまい、まともに使えません。
Apache 2.4.6 まで使えていた mod_perl の Apache 2.4 パッチが利用できない状況になったのかもしれません。
Apache 2.4.6 であれば、上記の手法にて FreeBSD 10 上で運用できます。
もうひとつの問題は、PHP 5.5.9。
どういうわけか libphp5.so が作成されません。
configure でも shered Library Support は no とされてしまいます。。
原因は判らないが、構築環境の問題であることは確か。
下記ページを参考に、手動で .so ファイルを作成しました。
Permanent Link to How to compile PHP5 on 64bit Linux (CentOS) [hiro345]
ところで、提起ページでいう「かなり長いコマンド」は、実に20000文字近い長さがあり、通常環境では、上手くいきません。こんなときは、バイナリエディトするのです。
unix 環境では、hexedit とかあるのですが、インストールが面倒なので以下で示すようにして、「かなり長いコマンド」をファイルにして、編集しました。こんな感じです:
vimでバイナリを表示し、値を変更したい [rdera ブログ]
これで、こんな感じで構築できました。
2014/02/15(土)FreeBSD10 でアプリケーションを構築してみる
2017/10/12 17:04
この方法だと、構築に要する時間はかかりますが、旧環境は温存できます。
それはさておき、FreeBSD 10 はどんなものか、を把握するために、ちょっとやってみたところが・・・
正直、嵌ったので・・・orz
情報で得る内容と、実際に実務作業して得る内容は概して異なることが多いので、こうして経験することが重要なのです。
まず、ports の内部管理方法が変わり、portupgrade コマンドでアプリケーションの更新をしようとすると、「pkgng をインストールしろ」みたいなメッセージが出て怒られてしまい、以下のような手順が表示される :
- switch to pkgng: 1) Add WITHOUT_PKGNG to /etc/make.conf 2) Install ports-mgmt/pkg 3) Convert your package database by running pkg2ng 4) Remove WITHOUT_PKGNG from /etc/make.conf提示されたとおりにして、再び portupgrade コマンドでアプリケーションの更新を行うことができました。
portsnap コマンド、portversion コマンドなどは、画面表示が若干変更されていますが、従来どおり使用できます。
気になる(ここからが本題)のが、デフォルトのコンパイラが clang に変わったことによる影響です。
当方では、痒いところに手が届くよう、一部の主要ソフトウェアをソースコードから構築しています。それらソフトウェアに対する影響です。
結果、これに嵌りました・・・ 以下、こちらで判明した内容です。
ただ、十分な確認はしていません。
筆者の通常環境である、環境変数 CC を未定義にしておいたときの状態です。
・Postfix : clang 環境でも問題無さそう
・dovecot : clang 環境でも問題無さそう
・PostgreSQL : configure が gcc を強制する。
・OpenLDAP : clang 環境でも問題無さそう
・Courier-Authlib: configure が gcc を強制する。
・Maildrop : configure が gcc を強制する。
・ClamAV : configure が gcc を強制する。
・Apache 2.4 : clang 環境では構築不可。 環境変数 CC で gcc を強制要。
・PHP 5.5 : clang 環境では構築不可。 環境変数 CC で gcc を強制要。
・mod_perl : clang 環境では構築不可。 環境変数 CC で gcc を強制要。
・rsyncd : configure が gcc を強制する。
・proftpd : configure が gcc を強制する。
筆者の環境では、Web サーバにて Apache 2.4 + mod_perl + PHP 5.5 という組み合わせと、 Apache 2.2 + mod_perl + PHP 5.4 という組み合わせで運用しています。
実は、この組み合わせでも嵌ったのですが、別記事にします。
2014/01/28(火)FreeBSD 10.0R リリース
2017/10/12 5:56
思っていたよりも早く、また忘れていたというのが実情でしょうか。。orz
今回のバージョンは、既存ユーザ目線で見ても結構変わっています。
従来バージョンからのアップデートは可能ですが、freebsd-update(8) を使ってアップデートする場合、以下のバージョン相当以上である必要があります:
FreeBSD 8.3R-p13
FreeBSD 8.4R-p6
FreeBSD 9.1R-p9
FreeBSD 9.2R-p2 (以上 FreeBSD-EN-13:04,FreeBSD-EN-13:05 より)
大きな変更点としては、
・ デフォルトで使用する(C言語)コンパイラを GCC から clang(1) に変更した。
・ ベースシステムのDNSリゾルバを Unbound に変更した。 BIND はベースシステムから外した。
・ make(1) を NetBSD Projectで運用実績のある bmake(1) に置き換えた。
・ 新たに pkg(7) をデフォルトで使用するインストールソフトウェア管理ユーティリティとして提供した。
pkg_add(1), pkg_delete(1) は上記で対応できるので削除した。
・ 仮想環境の改良。 bhyve(8), virtio(4), Microsoft Hyper-V を guest 環境で使用できるようにした(?) #ちょっと意味不明・・
・ ZFS ファイルシステム TRIM サポートにSSDドライブを追加対応した.
・ ZFS ファイルシステムに high-performance LZ4 圧縮アルゴリズムを追加。
とアナウンスされているようです。
今般でサポート期限は以下のようになっています:
FreeBSD 8.3 は、今年(2014年)4月末でサポート終了になります。