以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

ownCloudを9.0.2にアップデートしたら最後にエラー吐いたのでチェックポイントを使いロールバックしたという話

http://www.flickr.com/photos/9294749@N03/5827296903photo by Scarygami 今日ownCloudを9.0.2にアップデートしようとした。だがアップデート後エラーとなり動作しなくなったのでチェックポイントで以前のバージョンに戻したという話。続きを読むから。

目次

CLIでアプデ

Webからだとどういうわけか画面がおかしくなるので、9.0.0から実装されたコマンドラインによるアップデートを試してみた。

$ sudo -u www-data -s
$ cd /path/to/owncloud
$ php updater/application.php
ownCloud updater 1.0 - CLI based ownCloud server upgrades
Checking system health.
 - file permissions are ok.
Current version is 9.0.1.3
Online version is 9.0.2 [stable]
What would you do next?
  [0] download
  [1] upgrade
  [2] abort
 > 1

nginx/php-fpmが動作するユーザー権限(Ubuntuだとwww-data)でowncloudのディレクトリに入り、php updater/application.phpを起動する。
1番を選択するとアップデートが始まる。0番だとパッケージのダウンロードのみ行う。
今回はアップデートなので1番を選択。チェックポイントの作成後アップデートが始まる。

死亡

しかし、データベースアップデート等が無事に終わったと思いきや、最後に初期化失敗という表示が。ほぼ同時にクライアントが接続不可の表示に。

Initialization failed with message:
Use upgrade:checkpoint --list to view a list of checkpoints
upgrade:checkpoint --restore [checkpointid] to revert to the last checkpoint
Please attach your update.log to the issues you reporting.
Done

update.logを見てみる。

$ cat updater/update.log
(前略)
[error] 

                                                                               
  [Symfony\Component\Process\Exception\ProcessFailedException]                 
  The command "php /path/to/owncloud/occ --no-warnings config:list --private  -  
  -output "json"" failed.                                                      
  Exit Code: 255(Unknown error)                                                
  Output:                                                                      
  ================                                                             
  Error Output:                                                                
  ================                                                             
  PHP Fatal error:  Class OCA\Encryption\Crypto\Encryption contains 1 abstrac  
  t method and must therefore be declared abstract or implement the remaining  
   methods (OCP\Encryption\IEncryptionModule::isReadyForUser) in /path/to/owncl  
  oud/apps/encryption/lib/crypto/encryption.php on line 550
(後略)

ロールバックじゃよ

んー暗号化モジュールのコード周りのバグか?ということで、アップデート前に作成されたチェックポイントで以前のバージョンに戻してみる。

$ php updater/application.php upgrade:checkpoint --list
9.0.1.3-573100239a077  - May 10 2016 06:24
9.0.1.3-573100b13c1bc  - May 10 2016 06:27
$ php updater/application.php upgrade:checkpoint --restore 9.0.1.3-573100b13c1bc
Restored checkpoint 9.0.1.3-573100b13c1bc

これでアップデート前の状態に戻った。暗号化されたファイルも問題なくアクセスできることを確認。
GitHubから関連するIssuesを探したがこれくらいしかなかった。
何日くらいか待てば修正版来るのかな…?

蛇足:crontabで定期的にチェックポイントを作る

マニュアルを見て、何気にチェックポイントを定期的に作るようにしてみたのは秘密。
rootのcrontabで設定する。
設定例:月曜日の午前2時15分に行う場合

15 2 * * 1 sudo -u www-data php /path/to/owncloud/updater/application.php upgrade:checkpoint --create > /dev/null 2>&1