2014/02/15(土)FreeBSD 10 上で Apache 2.4.7 やPHP は動作しない?

2017/10/12 17:06 サーバ運営・管理
clang 検証作業で最も嵌ったのはこれでした。orz
20140215_2.png

具体的には 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 ブログ]

これで、こんな感じで構築できました。
20140215_3.png

2014/02/15(土)FreeBSD10 でアプリケーションを構築してみる

2017/10/12 17:04 サーバ運営・管理
freebsd-update だと、named.conf 設定ファイルが消えるとかの報告が入っているので、subversion によるソースコード取得をして、自力構築でやってみました。
この方法だと、構築に要する時間はかかりますが、旧環境は温存できます。

それはさておき、FreeBSD 10 はどんなものか、を把握するために、ちょっとやってみたところが・・・
20140215_1.png

正直、嵌ったので・・・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 サーバ運営・管理
今月20日にリリースされていました。
思っていたよりも早く、また忘れていたというのが実情でしょうか。。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月末でサポート終了になります。

2013/10/07(月)FreeBSD 9.2R リリース

2017/10/12 5:42 サーバ運営・管理
掲載が遅れましたが、9/30 にリリースされました。
FreeBSD 9.1R または FreeBSD 8.3R/8.4R からのアップデートが可能のようです。
また、FreeBSD 10のα版がお目見えしています。

アナウンスによれば(適当な意訳です):
・ZFS ファイルシステムは、TRIM をサポートした.
・virtio(4) ドライバを amd64とi386 アーキテクチャー向け GENERICカーネルコンフィギュレーションに追加した.
・ZFS ファイルシステムは、lz4 圧縮を新たにサポートした.
・OpenSSL のバージョンを 0.9.8y に更新した.
・DTrace を GENERIC カーネルコンフィギュレーションにてデフォルト有効に変更した.
・DTrace のバージョンを1.9.0 に更新した.
・Sendmail のバージョンを 8.14.7 に更新した.
・OpenSSH のバージョンを 6.2p2 に更新した.
・headブランチ(先進開発チームの意)から、unmapped I/O サポートを組み込んだ.
#ちょっと、最後だけ具体的な内容がわかりません・・・

となっています。
新たに設定されたサポート期限は、以下の通りです。
20131007.png

2013/09/30(月)サーバ監視ツール munin 1.4.x → 2.0.x

2017/10/12 5:40 サーバ運営・管理
この手のツールには、zabbix や Nagios などあるのですが、どちらかといえば大規模向けであり、実際は専用の監視サーバを用意しないと使い物にならない代物で、中小規模には不向き感が強い。

筆者は munin 1.2 の頃から使ってはいますが、アップデート作業の負担が大きい感があり、久々に重い腰を上げて対応してみたというところです。

まだ蓄積を始めたばかり(以前の監視データは思い切って削除・・・)なので、観るべきデータはスカスカですが。。。こんな感じで各種情報がグラフの形で得られます。
20130930_1.png

全体の感じはこんな感じ。目の前のディスプレイはまだワイドタイプではないので、横が切れています。
20130930_2.png

というか、最近はワイドタイプディスプレイ前提のWebアプリケーションやWebサイトが当たり前になってきたのです・・・あぁ。。orz

今回から、FreeBSD の Ports にて構築することにしました。
/usr/ports/sysutils/munin-node ・・・ 監視対象のサーバにインストール
/usr/ports/sysutils/munin-master ・・ 監視を行うサーバにインストール

監視を行うサーバには、当然のことながら Apache などの Web サーバが稼動していなければなりません。munin は、監視を行うサーバにて、監視対象のサーバから独自プロトコルで情報を取得し、統計情報の蓄積と HTML・グラフ生成を行うような仕組みになっています。

詳しい構築方法は、各所で紹介されているのでとりあえずそちらに任せるとして、
忘れがちなのは、監視対象のサーバにて、具体的な監視対象を設定する操作。

FreeBSD にて munin-node をインストールすると、/usr/local/etc/munin 配下に設定ファイルが作成されています。ここの munin-node.conf を適宜変更するのですが、これだけでは駄目で、 /usr/local/etc/munin/plugins 配下に具体的な監視対象をシンボリックリンクの形で設定する必要があります。

まず、/usr/local/etc/munin/plugins にディレクトリを移動しておいて、
rootユーザ にて、
munin-node-configure --suggest
を実行。そうすると、監視対象サーバにおいて、実際に監視対象にできる内容などが表示されます。
Plugin                     | Used | Suggestions
------                     | ---- | -----------
amavis                     | no   | no
apache_accesses            | no   | yes
apache_processes           | no   | yes
apache_volume              | no   | yes
利用可能はものは、Suggestions のところに yes が表示されます。
ここで、
munin-node-configure --shell
とすると、設定するための unix コマンドが表示されます。
上記の例とは合いませんが、こんな感じ:
root# munin-node-configure --shell
ln -s '/usr/local/share/munin/plugins/if_' '/usr/local/etc/munin/plugins/if_usbus'
ln -s '/usr/local/share/munin/plugins/if_errcoll_' '/usr/local/etc/munin/plugins/if_errcoll_usbus'
ln -s '/usr/local/share/munin/plugins/munin_stats' '/usr/local/etc/munin/plugins/munin_stats'
この部分をカレントディレクトリ(/usr/local/etc/munin/plugins) にて、コマンドラインにて実行すれば設定完了。
このあと、監視対象サーバをリブートすれば設定完了。
以前のバージョンより動作も軽いです。

2013/09/26(木)Apache 2.4.6 + mod_perl2

2017/10/12 5:38 サーバ運営・管理
記事が消えてしまったので、再度書き直し...orz
Apache は有名な Web サーバアプリケーションで、当方でも多用しています。
現行バージョンは 2.0.65(Ver 2.0系)、2.2.25(Ver 2.2系)、2.4.6(Ver 2.4系) の3つ。
現時点で最も普及しているのは、おそらく 上記のVer2.2系でしょう。

ですが、Ver 2.4系への以降が始まっています。
Linux の Debian や Fedora あたりはサポートの主力を Ver 2.4系に移行したとか。
当方でも FreeBSD ではありますが、このブログを含むWebサーバを Apache 2.4に移行しました。
20130926.png

題名の Apache 2.4.6 + mod_perl2 ですが、この組み合わせではそのままではインストール自体ができません。正式対応もしていません。
Apache 2.4 に対応したパッチを mod_perl2 に施す必要があります。
#mod_perl 2.0.8 用のパッチはありませんが、mod_perl 2.0.7用のパッチを一部変更で対応できます。

また、Perl 5.18 で mod_perl2 を動作させるには、 mod_perl 2.0.8 を導入する必要があります。
公式サイト(?)には掲載がありません)

特に新規案件で Apache 2.4 に移行しようか否か迷っているサーバ管理者も居られると思いますが、まだ時期尚早だと思います。ソフトウェア対応でまだ苦労しますので、、
mod_perl2 が Apache 2.4 対応になれば検討してもいいでしょう。

mod_perl2 は現在、Apache 2.4 対応作業が進められていますが、提供形態の検討を経て、作業が始まったのは先月くらいからのようです。

また、最近の mod_perl2 は、ソースコードから構築作業の際、
uninitialized value $v in concatenation (.) or string at
Apache-Test/lib/Apache/TestRun.pm line 1100
のようなエラーが出て、構築処理が中断してしまいます。
# mod_perl 2.0.5 あたりからこの現象は確認できるが、何故か一向に対処されない。

これの対処は、上記ファイルの 1100行目付近を
    while (my($k, $v) = each %args) {
      if (defined $v) {
        $v =~ s/\|/\\|/g;
        $body .= "\n\$Apache::TestConfig::Argv{'$k'} = q|$v|;\n";
      }
    }
のように変更して、再度構築作業をやり直せば大丈夫です。

2013/09/24(火)FreeBSD - ices0 が配布パッケージから除外(icegenerator の導入)

2017/10/12 5:37 サーバ運営・管理
ices0 というのは、インターネットラジオ放送において、エンドレスで繰り返し音楽などを流すためには欠かせないソフトウェアのひとつです。
これを「ストリーミング」などと言います。

有線放送におけるBGMを流すために不可欠なものと思って結構です。
今般、2ヶ月ぶりにサーバの各種モジュールをアップデートしようとしたら、FreeBSD の配布モジュール Ports において、24000余りのモジュールが更新・削除などされている模様。。orz

その過程で、提起の ices0 の提供が無くなってしまい、MP3 形式で保存してある数多くの音楽をストリーミング出来なくなりました。
ices0 の代わりになるものを探さなければならない。
ちょっと調べると icegenerator を代わりに使えということらしい。仕方が無いので、これを導入すること にしました。

しかし、いざ導入となるとあまり情報がありません。しかも結構古く、更新が2006年あたりで止まっている。。。大丈夫かいな? と心配でしたが、案の定少し嵌りました。。
以下、自分メモ。

MP3 形式のストリーミングには、この icegenerator のほかに
・icecast2 (現バージョン 2.3.3、libshout,lame など別途必要)
・id3lib (現バージョン 3.8.3、曲目メタ情報の処理に必須)

を予めインストールする必要があります。
上記をインストールした環境で icegenerator をインストールしないと面倒です。
icegenerator は、FreeBSD の場合は Ports からインストールが無難。
先ず、
# cd /usr/ports/audio/icegenerator
として、該当モジュールのディレクトリへ移動。
ここで、Makefile を以下の赤文字部分追加:
CONFIGURE_ARGS=   --exec-prefix=$PREFIX --with-shout=/usr/local --with-id3=/usr/local

ここで、
# make install
とすると、自動的にインストール作業が始まりますが、コンパイルエラーが2箇所出て途中で止まってしまうので、コンパイルエラーで指摘された部分をエラーメッセージを参考に手動修正しなければなりませんでした。

コンパイルが通って、インストールが終われば今度は設定ファイルの作成。
icecast2 の設定は、基本的に以前の設定を変える必要無し。
icecast2 の設定は、ここ を参考に。

問題は、icegenerator の設定。一応 ここ にわかりやすくまとめられてはいるが、鵜呑みにできま せん。
自らの環境に合わせて変えるのは言うまでもないですが、
SOURCE=source
は、このままでOK.ですが、
BITRATE=48000
は、WinAMP では上手く再生できるものの、当方には これ↓ (BB-shout) があり、
webradio01.jpg
接続してみると、どういうわけかエラーになります。
1時間ほど試行錯誤繰り返してみると、どうもここは、
BITRATE=48
のように 1kbps 単位で指定しないと駄目っぽい。BB-shout のバグなのか、icegenerator のバグか判りませんが、ともかくこの指定で動作するようになりました。

2013/08/13(火)Twitter への自動連携がダメダメだった件・・・

2017/10/12 5:32 サーバ運営・管理
とある友人に指摘されたのですが・・・
1日2~3回、当方の私設観測所で常時観測している気温の自動ツイートと、
1日2回自動ツイートしている、日の出・日の入り時刻が上手く行っていないことに気がつき、昨夜遅くに対処しました。

今年5月か6月くらいに自動観測機器が風雨の影響で不具合起こし、修理したのでその影響かと思っていたのですが、原因調べたら、Twitter API のバージョンアップに対応していなかったのが原因だったです。はい 。

こんな感じで、当方のTwitter アカウントにて自動ツイートされます。
20130813.png


ご指摘頂き、ありがとうございました(^^)。

2013/06/11(火)FreeBSD 8.4R リリース

2017/10/12 5:24 サーバ運営・管理
6月7日にアナウンスがありました。いつもの適当な意訳です。

元ネタ:FreeBSD 8.4-RELEASE Announcement

・Gnome を Version 2.32.1 に、KDE を Version 4.10.1 にそれぞれ更新。
・ZFS ファイルシステムは、Feature flags 5000 バージョンに更新。
・現時点で流通している全ての LSI ストレージコントローラをサポート。

本日時点でもサイトには反映されていませんが、アナウンス原文によると、FreeBSD 8.4R は Extented サポートになり、サポート終了は 2015/06/30 になります。

FreeBSD 8.3R のサポート終了は 2014/04/30 ですので、この日までに 8.4R/9.1R/STABLE版 に更新することになります。

FreeBSD 9 では、ストレージ周りの変更がされていますので、アップデートインストールでストレージデバイスの自動割り振りで不具合を起こすことがあります。
トラブルシュートの時間が取れない場合は、8.4R をお勧めできます。

筆者の環境では、S-ATA と従来の IDE 混在環境でこの現象が起き、シングルユーザモードで何とか対処した事例があります。

2013/04/02(火)vim 7.3を更新すると何故か文字化けするようになる・・・

2017/10/12 5:19 サーバ運営・管理
vim は、伝統的 unix ライクなスクリーンエディタです。
筆者は、このタイプのスクリーンエディタを20年以上愛用しています。

vim7.3 は多くの機能を「ユーザからのパッチ」で提供するという、一風変わったスタイルで、本日(2013/04/02) 現在で、その数は 875 に及ぶようです。
FreeBSD では、本日(2013/04/02) 現在でパッチ 669 までのものが提供されています。

最近、ports でソフトウェアの更新を図ると、日本語混じりのファイルを編集しようとすると、以下のように文字化けするようになりました。
before vim 7.3-669

先月あたりに発見し、原因が判らずじまいだったが、以下のブログ記事が解決してくれました。

vim で日本語が中途半端に文字化け (solved)
http://lesguillemets.blogspot.jp/2013/03/vim-solved.html

ここに書いてある記述にしたがって、診てみました。
# vim --version
・・・省略・・・
+mouse_xterm -mouse_urxvt -mouse_sgr -multi_byte +multi_lang -mzscheme
・・・省略・・・

赤文字のところに注目。同じように multibyte が何故か無効になっています。
全角文字はマルチバイトでないと対応できませんからね。

こうなれば、対処は暫定ですが簡単です。
ports の vim に以下のように変更を加えます。
# cd /usr/ports/editors/vim
# vi Makefile

(以下赤文字部分を追加)
MAKE_ARGS+= CONF_ARGS="--prefix=$PREFIX --with-tlib=termlib $CSCOPE_ARG --enable-multibyte "

# portupgrade -rf vim-lite-7.3.669

再構築が完了したら、再度確認します。
# vim --version
・・・省略・・・
+mouse_xterm -mouse_urxvt -mouse_sgr +multi_byte +multi_lang -mzscheme
・・・省略・・・


今度は大丈夫そうです。
確認のために、同じファイルを編集してみます。
after vim 7.3-669

おかげさまで修復できました(^^)
ports の不具合なのか? 環境の問題なのか?