WordPress の更新を検知できない場合

WordPress 3.4 がリリースされた。テーマも更新されているのでまずは家のテスト環境のバージョンアップを試みたけれどダッシュボードには「最新バージョンの WordPress をお使いです。」と表示され、何度「もう一度確認する」ボタンを押してもダメ。最新版を見つけられないようだ。
自動更新のための要件を確認してそう言えば SELinux を有効にしていたことを思い出す。/var/log/messages を見ると案の定エラーメッセージ。

Jun 15 20:27:07 myserver kernel: [ 2036.676475] type=1400 audit(1339759627.861:98): avc:  denied  { name_connect } for  pid=22550 comm="httpd" dest=80 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket

更新をチェックするためのソケットを作成できなかったみたい。auditd が動いていなかったので動かして audit.log にエラーを吐き出させて、以下を実行し対策のヒントにする。

# tail /var/log/audit/audit.log  | audit2allow -a -w

今回は boolean を設定して対処。

# setsebool -P httpd_can_network_connect 1

これで httpd は TCP セッションを張れるようになったけど今度は更新実行したときに「要求されたアクションを実行するには、WordPress が Web サーバーにアクセスする必要があります」という見慣れないメッセージが表示される。どうやらファイルのパーミッションの問題らしい。

# chown -R apache /usr/share/wordpress-ja

で、あとは SELinux のタイプを設定しなければならないのだけれど、ここら辺で力尽きた。

# setenforce 0

後でまた有効化するので許してね。というわけで WordPress の更新は完了。 追記) バージョンアップに必要なパーミッションを運用時にも設定するかという問題なので、これでも良いような気がしてきた。