DebianのRoundcubeを手動アップデート
以前構築したRoundcubeを利用しているDebian(10.4)サーバーでPHPのバージョンを7.0から7.3に上げたところ、Roundcubeが稼働しなくなりました。
別のアプリでcurlを使いたいという事情があり、PHPのバージョンアップは譲れなかったので、Roundcubeを1.3.11から1.4.9にアップデートしてみることにしました。ただ、後から判明したことですが、このエラーの原因はPHPのバージョンの問題ではありませんでした。
もともとのRoundcubeのバージョンは1.3.11で、apt経由のセキュリティアップデートとして1.3.15が提供されていましたが、どうせなら最新版にしようとということで1.4.9を公式ページよりダウンロードし手動でアップデートをしてみることにしました。
PHPのアップデート
apacheサーバーに設定してあるPHP7.0を、apt経由でPHP7.3にアップデートしました。
...
# apt update
...
# apt install php7.3
...
「php -v」コマンドでバージョンを確認し、更新されていないようなら「update-alternatives --set php /usr/bin/php7.3」とします。
PHP PHP 7.0.33...
...
update-alternatives --set php /usr/bin/php7.3
...
# php -v
PHP PHP 7.3.19...
...
ちなみに「update-alternatives --list 名前」とすると、同じ名前で管理されているバイナリの一覧がでます。
さらに、apacheサーバーでPHPモジュールを7.0から7.3に切り替える作業をします。
# a2dismod php7.0
...
# a2enmod php7.3
...
Roundcubeのダウンロード
筆者が使用しているDebian(buster 10.4)では、aptでRoundcubeの1.4系は取得できませんでした。そこで、RoundCube公式ページに案内のあった、Github:「upgrading guide」にしたがって手動でアップデートしたいと思います。
RoundCube公式のダウンロードページよりファイルをダウンロードして展開しておきます。PHPとJavascriptの依存を自分で解決するなら「Dependent」版、そうでなければ「Complete」版を選択します。ここでは「Complete」を選択しました。
ダウンロード先はどこでもいいですが、ここでは/usr/local/srcとしています。
...
# wget https://github.com/roundcube/roundcubemail/releases/download/1.4.9/roundcubemail-1.4.9-complete.tar.gz
...
# tar zxvf roundcubemail-1.4.9-complete.tar.gz
バックアップ
aptでアップデートする場合もバックアップは必要です。特に手動でRoudcubeのプログラム部のPHPファイルに修正を加えている場合は、すべて上書きされてしまいますので、修正箇所の確認とインストール後の再修正が必要になってきます。
基本的には本体(/usr/share/roundcube)のバックアップと、データベースのdumpをしておけばいいと思いますが、筆者は次の項目をバックアップしておきました。OSやバージョンにより違いがあると思います。各自「find / -name '*roundcube*'」等を実行して対象を確認してください。
- /var/lib/roundcube/
この中のファイルは、tempディレクトリの中身をのぞいてすべてシンボリックリンクです。
- /etc/roundcube/
設定ファイル群が入っているディレクトリです。
- /usr/share/roundcube/
Roundcubeの本体が含まれているディレクトリです。
- /etc/dbconfig-common/roundcube.conf
Roundcubeのdb設定ファイルです。
- /etc/default/roundcube-core
筆者の場合はコメントだけで何も記述されていませんでした。設定を加えた場合や中身を確認して何か記述されていればバックアップをとっておきましょう。
- /etc/logrotate.d/roundcube-core
ログローテトの設定ファイルです。オリジナルの設定を加えていたり、心配な場合はバックアップをとっておきましょう。
- /etc/cron.d/roundcube-core
メンテナンス用のcronタスクの設定が入っているファイルです。心配な場合はバックアップをとっておきましょう。
- /etc/cron.daily/roundcube-core
同上
- (/etc/apache2/conf-enabled/roundcube.conf)
/etc/apache2/conf-available/roundcube.confへのシンボリックリンクになるので、個別にバックアップする必要はありません。削除されてしまった場合はシンボリックリンクを再作成します。
- (/etc/apache2/conf-available/roundcube.conf)
こちらも設定ファイルへのシンボリックリンクとなっています。本体は/etc/roundcube/apache.confです。
- /usr/share/doc/内のドキュメント
実体としてはroundcube-mysql、roundcube-coreディレクトリがあります。
- MariaDB(MySQL)
筆者は管理にMariaDB(MySQL)を使っていますので、そちらのデータベースダンプを作成しました。
筆者の場合はデータベース名をroundcubeにしてありますので、次のようにしました。
$ mysqldump -u ユーザー名 -p roundcube --default-character-set=binary>/home/user/xxx.dump解説を読むとデータベースのスキーマが変更されることもあるようなので、必ずバックアップをとっておきましょう。
ちなみにcpコマンドでバックアップを作成する際は、-pオプションを付けてタイムスタンプを維持した方が、自分で編集したファイルか否かがわかりやすいと思います。
アップデート
アップデートをするまえにいくつか設定をしておく必要があります。
まずrsyncが必要です。アプリがない場合はaptでインストールしてください。存在するか不明なら一度実行しておきましょう。
また、PHPで「system」ファンクションを使用可能にしておく必要があります。php.iniの「disable_fnctions」のエントリーにsystemが含まれている場合は、いったん削除してアップデートが終わった後に元に戻します。
Roundcube用のデータベースの権限を確認しておきます。
それらの準備ができたら、先ほどダウンロードして展開したディレクトリに移動します。ここでは/usr/local/src/roundcubemail-1.4.9とします。
binディレクトリにあるinstallto.shスクリプトに、現在のRoundcubeのディレクトリを引数として渡して実行します。
エラー
いストール時にconfigディレクトリがないため次のエラーが起きるかもしれません。
このエラーは/usr/local/roundcube/configディレクトリを作成した後再度installto.shを実行すれば回避できます。
ここに作成されるのは設定ファイルdefaults.inc.phpでひな形としてコピーして使うもののようです。今回のアップデートでは前のバージョンの設定がそのまま使えたので不要でした。
PHPを7.3をインストールしapacheでのバージョンを切り替えた後、/var/log/roundcube/errorsに次のようなエラーが出力されRoundcubeにログインができなくなりました。
...
# a2enmod php7.3
...
当初RoundcubeとPHPのバージョンの相性の問題だと思ったのですが、このエラーは単にphp7.3-mysqlがインストールされていない為に起きたものでした。Roundcubeインストール時にphp7.0-mysqlをインストールしたのをすっかり忘れていました。