関連記事
経緯
関連記事にてApache2.2.34のインストール手順をまとめたのですが、その中でapr-1.6.5をインストールしないといけない箇所がありました。
で、その手順に従ってapr-1.6.5をrpmbuildによりパッケージ化しようとしたのですが、そこで予期しないエラーが発生したため書き留めておきます。
未来の自分が困らないように・・・
詳細と解決方法
環境
$ uname -a
Linux [ホスト名] 2.6.32-504.el6.x86_64
$cat /etc/redhat-release
CentOS release 6.6 (Final)
いや、アップデートしろよ・・
エラー内容
さて、問題のコマンドは以下となります。
# rpmbuild -ta apr-1.6.5.tar.gz
意気揚々と以上のコマンドを実行したのですが、以下のエラーが出力されてしまいました。
(前略)
testsockets : /Line 131: Could not bind socket (99): Cannot assign requested address
-Line 189: Condition is false, but expected true FAILED 1 of 7
(中略)
apr_socket_sendfile()->0, sent 370*** bytes
After apr_socket_sendfile(), the kernel file pointer is at offset 0.
client: apr_socket_sendfile() worked as expected!
Waiting for a client to connect…
Processing a client…
server: apr_socket_sendfile() worked as expected!
Programs failed: testall
make: *** [check] Error 1
どうやらtestsocketsでしくっているようです。
しかも、アップデート対象のサーバ全てで起きているわけではなく、一部のサーバでしか発生していませんでした。
なんぞや?ってなって調べ始めました。
原因
ざっくり調べたところ、バグのようでした。
こちらのページが参考になりました。
ipv6を無効にしていると、socketテストに失敗してしまうようです。
対策
ipv6が無効になっているのか、有効になっているのかを確認してみました。
こちらのページを参考に・・・
# cat /etc/sysctl.conf
...
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
...
どうやら無効になっていそうです。
というわけで、有効にしてみました。
# cat /etc/sysctl.conf
...
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
...
コンフィグファイル編集後、sysctl.confを再読み込み
# sysctl -p
で、再度ビルドしてみました。
・・・無事成功!
あとがき
というわけで、解決できました。
サーバごとに挙動が違うのはipv6が有効になっているものもあったからですね。
それでは!
コメント