【ubuntu16.04】wordpressが自動更新に失敗する場合の対処法

 ubuntu16.04で、aptコマンドを用いてWordPressをインストールした際に、自動更新が無効になっている場合があります。

 ubuntu上にWordpressを配置する方法を解説します。 LAMPのインストール  wordpressは、LAMP上で動作します...

 今回は、これを解消して自動更新を実施できるようにする手順をご紹介します。

「WordPress の自動更新に失敗しました。再度、更新を行ってみてください。」と表示される問題

 apt利用でのインストール実施時から、このようなメッセージが出るようになりました。

 apt upgradeコマンドでアップグレードできるようなので、あまり気にしてはいませんでしたが、WordPressのバージョンを確認してみると、およそ3~4か月、リポジトリ側の更新が遅れています。

 利用しているプロダクトのアップデートが遅れているということは、セキュリティ上の懸念があることを意味します。非常に気になる問題ですので、今回はこの問題に対して取り組んでみます。

問題の調査

 まず、WordPressのデバッグ出力をONにして、更新ページを表示してみたところ、次のようなメッセージが出ました。

Notice: Trying to get property of non-object in .../wp-admin/update-core.php on line 39

 該当箇所のコードを調べてみます。

list_core_update( object $update )

    if ( 'en_US' == $update->locale && 'en_US' == get_locale() )

 $updateがnon-objectになっているようです。

 $update自体は、呼び元から引数として渡されているのですが、どうも容易に解決できる問題ではなさそうです。

解決手順

手動でのアップデート

 前述のように、phpの修正による問題の解消は困難ですので、手動でのアップデートを行います。

 幸いにして、細かい手順がdebianwikiに記載されていたので、この手順を試します。

 必ず、事前にWordPress、データベースのバックアップおよびプラグインの停止を行っておいてください。

 まず、最新版のパッケージをインストールします。

$ cd ~
$ wget http://wordpress.org/latest.tar.gz

 wp-includesおよびwp-adminをバックアップします。本文ではバージョンを末尾に付けていますが、これは何でも構いません。

 以下では日付を自動的に取得するようにしました。

$ sudo mv /usr/share/wordpress/wp-includes{,`date +"%Y-%m-%d"`}
$ sudo mv /usr/share/wordpress/wp-admin{,`date +"%Y-%m-%d"`}

 次に、tarコマンドによって各ファイルを展開します。

$ sudo tar -zxvf latest.tar.gz -C /usr/share wordpress/wp-admin
$ sudo tar -zxvf latest.tar.gz -C /usr/share wordpress/wp-includes
$ sudo tar -zxvf latest.tar.gz -C /usr/share wordpress/wp-content
$ sudo tar --wildcards -zxvf latest.tar.gz -C /usr/share/ 'wordpress/*.php'

 最後に、パーミッションを変更します。

$ sudo chown -R www-data:www-data /usr/share/wordpress/

 不要なパッケージを削除します。

$ rm latest.tar.gz

 以上でアップデートは完了です。
 管理画面にアクセスしてデータベースのアップデートを行ってください。

自動アップデートの実行

 これで自動アップデートが行われるようになったはずです。

 データベースのアップデートが完了したら、自動アップデートを実行し、正常にアップデートが行われるか確認します。

 もし、この手順でFTPの接続情報を入力を求められてしまう場合は、パーミッションを確認してください。

$ ls -ltr /usr/share/wordpress

 所有権がwww-dataになっているか、書き込み権限があるかを確認します。

シェルスクリプト

 上記手順をすべて自動化するシェルスクリプトを作成しました。

$ cd ~
$ wget https://www.deep-rain.com/wp-content/uploads/sh/manual-upgrade.sh
$ chmod +x manual-upgrade.sh

 以下のコマンドを実行する際は、必ずvimなどでコードを確認の上、自己責任で実行してください。

$ ~/manual-upgrade.sh

 このコマンドで手動アップデート手順がすべて自動的に行われます。