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/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 ブログ]
これで、こんな感じで構築できました。