owncloudのアップデートしたら失敗したので問題になった点をメモ

たまにアップデートしなくてはと思って VPS にインストールしてある owncloud をアップデート。

1yum upgrade owncloud

これでサーバー側のファイルは問題なく更新されたが、実際にアクセスした時にログイン画面からもアップデートを行う必要があるのでアップデートする。

が、しかしアップデート失敗。

WEB サーバーのタイムアウトでエラーが起きたのかと思い暫くまってリロードしてみるがメンテナンスモードから変わらない。

此処から先、思っていた以上に時間を取られた・・・しかし、考えてみると一定の間隔で同じような思いをしているような気がする。

メンテナンスモード解除

メンテナンスモードから戻っていないだけだと思い、メンテナンスモードを解除。
移動して

1cd /var/www/html/owncloud

Congig ファイルを修正

1vi ./config/config.php
1# congfig.php
2'maintenance' => true,
34'maintenance' => false,

これで大丈夫かと思いきや、アップデートしなさいの画面が出て来る。

念の為もう一度同じ工程を行うも同じ結果に・・・。

シェル側からのアップデート

何が起こっているのかも分からないのでシェル側からアップデートを試みる。

注意点としては実行ユーザーは WEB サービスを実行しているユーザーになること。

私の環境では Nginx なので nginx、Apache であれば apache とか www-data とか。
(この時何か違和感を感じたが気に留めなかった)
場所を移動

1cd /var/www/html/owncloud/

ユーザーは WEB サービスの実行ユーザー

1sudo -u nginx php occ upgrade

結果としてはエラーw

やっぱりパーミッションのエラーと言われたので、ファイルの権限を確認すると見事にユーザーが apache になっていた・・・。

サーバー側でアップデート掛けたからファイルの権限もデフォルトに戻っていた。
(この段階で先ほど感じた違和感が払拭されたw)

という事で公式に便利なスクリプト掲載されていたのでそれを実行してパーミッション関連を整える。

上記のスクリプトを適当な名前付けて実行権限付けて実行すれば適切なパーミッションに変更してくれる。

 1#!/bin/bash
 2ocpath='/var/www/html/owncloud'
 3htuser='nginx'
 4htgroup='nginx'
 5rootuser='root'
 6
 7printf "Creating possible missing Directories\n"
 8mkdir -p $ocpath/data
 9mkdir -p $ocpath/assets
10mkdir -p $ocpath/updater
11
12printf "chmod Files and Directories\n"
13find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
14find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750
15
16printf "chown Directories\n"
17chown -R ${rootuser}:${htgroup} ${ocpath}/
18chown -R ${htuser}:${htgroup} ${ocpath}/apps/
19chown -R ${htuser}:${htgroup} ${ocpath}/assets/
20chown -R ${htuser}:${htgroup} ${ocpath}/config/
21chown -R ${htuser}:${htgroup} ${ocpath}/data/
22chown -R ${htuser}:${htgroup} ${ocpath}/themes/
23chown -R ${htuser}:${htgroup} ${ocpath}/updater/
24
25chmod +x ${ocpath}/occ
26
27printf "chmod/chown .htaccess\n"
28if [ -f ${ocpath}/.htaccess ]
29 then
30  chmod 0644 ${ocpath}/.htaccess
31  chown ${rootuser}:${htgroup} ${ocpath}/.htaccess
32fi
33if [ -f ${ocpath}/data/.htaccess ]
34 then
35  chmod 0644 ${ocpath}/data/.htaccess
36  chown ${rootuser}:${htgroup} ${ocpath}/data/.htaccess
37fi

変更を加えたのは2行目~4行のファイルパス・ユーザー名・グループ名の3つ。

実行後、ちゃんと変更されているか確認してみる。

「config フォルダに書き込めません」エラー発生

これで大丈夫かと思ったら今度は config フォルダに書き込めませんのエラーが。

ちなみに SELinux は切っている状態です。

1getenforce
2Disabled

# Disable で無かった場合は下記で無効化

1setenforce 0

# 永続的に無効にするなら ※要サーバーの再起動

1vi /etc/selinux/config
1SELINUX=disabled

特に何も間違っていそうなものは無いのだがエラーが直らない。

と思ったが、ファイル自体の書き込み権限無いだけだった・・・。

結果、config.php のパーミッションに書き込み権限を付与して解決。

とりとめのないまとめ

定期的にこの作業していていつも悩むことになるのでメモしておきます。

基本的にはログイン画面の指示を消化すれば問題ないですが・・・何故かハマるw

もっとこまめにアップデートしたりメンテしたりすれば良いだけなんですが・・・どうも問題が起こらないとアップデートする気になれないです。

下手にアップデートして動かなくなる方が困るし・・・w