|||||||||||||||||||||

なんぶ電子

- 更新: 

DebianのRoundcubeを手動アップデート

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にアップデートしました。

$ su -
...
# apt update
...
# apt install php7.3
...

「php -v」コマンドでバージョンを確認し、更新されていないようなら「update-alternatives --set php /usr/bin/php7.3」とします。

# php -v
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としています。

# cd /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でインストールしてください。存在するか不明なら一度実行しておきましょう。

# apt install rsync

また、PHPで「system」ファンクションを使用可能にしておく必要があります。php.iniの「disable_fnctions」のエントリーにsystemが含まれている場合は、いったん削除してアップデートが終わった後に元に戻します。

Roundcube用のデータベースの権限を確認しておきます。

それらの準備ができたら、先ほどダウンロードして展開したディレクトリに移動します。ここでは/usr/local/src/roundcubemail-1.4.9とします。

# cd /usr/local/src/roundcubemail-1.4.9

binディレクトリにあるinstallto.shスクリプトに、現在のRoundcubeのディレクトリを引数として渡して実行します。

# bin/installto.sh /usr/share/roundcube

エラー

いストール時にconfigディレクトリがないため次のエラーが起きるかもしれません。

Failed to execute command: rsync -a --out-format=%n /usr/local/src/roundcubemail-1.4.9/config/defaults.inc.php /usr/share/roundcube/config/defaults.inc.php

このエラーは/usr/local/roundcube/configディレクトリを作成した後再度installto.shを実行すれば回避できます。

# mkdir /usr/share/roundcube/config

ここに作成されるのは設定ファイルdefaults.inc.phpでひな形としてコピーして使うもののようです。今回のアップデートでは前のバージョンの設定がそのまま使えたので不要でした。

PHPを7.3をインストールしapacheでのバージョンを切り替えた後、/var/log/roundcube/errorsに次のようなエラーが出力されRoundcubeにログインができなくなりました。

# a2dismod php7.0
...
# a2enmod php7.3
...
rcube_session->start( in /usr/share/roundcube/program/lib/Roundcube/rcube_db_mysql.php on line 144

当初RoundcubeとPHPのバージョンの相性の問題だと思ったのですが、このエラーは単にphp7.3-mysqlがインストールされていない為に起きたものでした。Roundcubeインストール時にphp7.0-mysqlをインストールしたのをすっかり忘れていました。

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告