たまにアップデートしなくてはと思ってVPSにインストールしてあるowncloudをアップデート。
yum upgrade owncloud
これでサーバー側のファイルは問題なく更新されたが、実際にアクセスした時にログイン画面からもアップデートを行う必要があるのでアップデートする。
が、しかしアップデート失敗。
WEBサーバーのタイムアウトでエラーが起きたのかと思い暫くまってリロードしてみるがメンテナンスモードから変わらない。
此処から先、思っていた以上に時間を取られた・・・しかし、考えてみると一定の間隔で同じような思いをしているような気がする。
メンテナンスモード解除
メンテナンスモードから戻っていないだけだと思い、メンテナンスモードを解除。
移動して
cd /var/www/html/owncloud
Congigファイルを修正
vi ./config/config.php
# congfig.php
'maintenance' => true,
↓
'maintenance' => false,
これで大丈夫かと思いきや、アップデートしなさいの画面が出て来る。
念の為もう一度同じ工程を行うも同じ結果に・・・。
シェル側からのアップデート
何が起こっているのかも分からないのでシェル側からアップデートを試みる。
注意点としては実行ユーザーはWEBサービスを実行しているユーザーになること。
私の環境ではNginxなのでnginx、Apacheであればapacheとかwww-dataとか。
(この時何か違和感を感じたが気に留めなかった)
場所を移動
cd /var/www/html/owncloud/
ユーザーはWEBサービスの実行ユーザー
sudo -u nginx php occ upgrade
結果としてはエラーw
やっぱりパーミッションのエラーと言われたので、ファイルの権限を確認すると見事にユーザーがapacheになっていた・・・。
サーバー側でアップデート掛けたからファイルの権限もデフォルトに戻っていた。
(この段階で先ほど感じた違和感が払拭されたw)
という事で公式に便利なスクリプト掲載されていたのでそれを実行してパーミッション関連を整える。
上記のスクリプトを適当な名前付けて実行権限付けて実行すれば適切なパーミッションに変更してくれる。
#!/bin/bash
ocpath='/var/www/html/owncloud'
htuser='nginx'
htgroup='nginx'
rootuser='root'
printf "Creating possible missing Directories\n"
mkdir -p $ocpath/data
mkdir -p $ocpath/assets
mkdir -p $ocpath/updater
printf "chmod Files and Directories\n"
find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750
printf "chown Directories\n"
chown -R ${rootuser}:${htgroup} ${ocpath}/
chown -R ${htuser}:${htgroup} ${ocpath}/apps/
chown -R ${htuser}:${htgroup} ${ocpath}/assets/
chown -R ${htuser}:${htgroup} ${ocpath}/config/
chown -R ${htuser}:${htgroup} ${ocpath}/data/
chown -R ${htuser}:${htgroup} ${ocpath}/themes/
chown -R ${htuser}:${htgroup} ${ocpath}/updater/
chmod +x ${ocpath}/occ
printf "chmod/chown .htaccess\n"
if [ -f ${ocpath}/.htaccess ]
then
chmod 0644 ${ocpath}/.htaccess
chown ${rootuser}:${htgroup} ${ocpath}/.htaccess
fi
if [ -f ${ocpath}/data/.htaccess ]
then
chmod 0644 ${ocpath}/data/.htaccess
chown ${rootuser}:${htgroup} ${ocpath}/data/.htaccess
fi
変更を加えたのは2行目~4行のファイルパス・ユーザー名・グループ名の3つ。
実行後、ちゃんと変更されているか確認してみる。
「configフォルダに書き込めません」エラー発生
これで大丈夫かと思ったら今度はconfigフォルダに書き込めませんのエラーが。
ちなみにSELinuxは切っている状態です。
getenforce
Disabled
# Disableで無かった場合は下記で無効化
setenforce 0
# 永続的に無効にするなら ※要サーバーの再起動
vi /etc/selinux/config
SELINUX=disabled
特に何も間違っていそうなものは無いのだがエラーが直らない。
と思ったが、ファイル自体の書き込み権限無いだけだった・・・。
結果、config.phpのパーミッションを666にして解決。
とりとめのないまとめ
定期的にこの作業していていつも悩むことになるのでメモしておきます。
基本的にはログイン画面の指示を消化すれば問題ないですが・・・何故かハマるw
もっとこまめにアップデートしたりメンテしたりすれば良いだけなんですが・・・どうも問題が起こらないとアップデートする気になれないです。
下手にアップデートして動かなくなる方が困るし・・・w