有馬総一郎のブログ

(彼氏の事情)

2022年01月30日 22:23:28 JST - 5 minute read - Comments - Linux

NextcloudをWeb画面から21にアップグレードする

いつのまにかnextcloudバージョン20がサポート外になっていたので、アップグレードすることにした。 20.0.7 から 20.0.14 、そして 20.0.14 から 21.0.7 と二度繰り返す必要があった。

すると、知らない手順が増えていた?のでメモ。

Nextcloud

初めパスワードを入力するのかと思ったら、エラーとなる。

画面に表示されたコマンドをnextcloudがインストールされたサーバーで叩く。

php -r '$password = trim(shell_exec("openssl rand -base64 48"));if(strlen($password) === 64) {$hash = password_hash($password, PASSWORD_DEFAULT) . "\n"; echo "Insert as \"updater.secret\": ".$hash; echo "The plaintext value is: ".$password."\n";}else{echo "Could not execute OpenSSL.\n";};'

すると

Insert as "updater.secret": 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX
The plaintext value is: 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12

60文字の英数字記号と64文字の英数字が表示されるので

/var/www/nextcloud/config/config.php

//  'updater.secret' => '01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW',
  'updater.secret' => '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX',

updater.secretの値を書き換える。

これでアップデートが継続され、完了する。

で、例によって設定の概要画面を見るといくつか警告が。

Nextcloud
    ユーザーがインポートしたSSL証明書をチェックするバックグラウンドジョブが保留になっています。しばらくして再度確認してください。

    ご使用のシステムには、デフォルトの電話地域が設定されていません。これは、国コードなしでプロファイル設定の電話番号を検証するために必要です。国コードなしで番号を許可するには、地域のそれぞれの ISO3166-1コード↗とともに "default_phone_region" を設定ファイルに追加してください。
    データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
        テーブル "oc_filecache"のインデックス "fs_size"が見つかりません。
    このインスタンスのphp-imagickモジュールはSVGをサポートしていません。互換性の向上のために、インストールすることをお勧めします。

php7.4からphp8.0に

警告内容を修正しようすると、いつのまにかphpバージョンが 7.4 から 8.1 1にアップグレードされていた。

$ sudo -u www-data php occ db:add-missing-indices
This version of Nextcloud is not compatible with > PHP 8.0.<br/>You are currently running 8.1.1
$ php -v
PHP 8.1.1 (cli) (built: Dec 31 2021 07:26:02) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.1, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.1, Copyright (c), by Zend Technologies

8.1 だとnextcloudが動かないので、8.0にする。そもそも8.0がインストールされてないのでする。

Example installation on Ubuntu 20.04 LTS — Nextcloud latest Administration Manual latest documentation

あたりを参考に全て8.0で叩く。

sudo apt install php8.0-gd php8.0-mysql php8.0-curl php8.0-mbstring php8.0-intl
sudo apt install php8.0-gmp php8.0-bcmath php8.0-xml php8.0-zip
sudo apt install php8.0-fpm

php8.0をデフォルトバージョンとする。

$ sudo update-alternatives --set php /usr/bin/php8.0
update-alternatives: /usr/bin/php (php) を提供するためにマニュアルモードで /usr/bin/php8.0 を使います
$ php -v
PHP 8.0.14 (cli) (built: Dec 20 2021 21:22:38) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.14, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.14, Copyright (c), by Zend Technologies

nginxのPHP-FPMの接続先を変更する。

/etc/nginx/sites-available/example.com.conf

upstream php-handler {
    #server 127.0.0.1:9000;
    #server unix:/var/run/php/php7.4-fpm.sock;
    #server unix:/run/php/php7.4-fpm.sock;
    server unix:/run/php/php8.0-fpm.sock;
}

これで良し!ようやく、警告に対応していく。

ユーザーがインポートしたSSL証明書をチェックするバックグラウンドジョブが保留になっています。しばらくして再度確認してください。

【Nextcloud】システムのCronにバックグラウンドジョブを設定する。 - freefielder.jp

↑にあるとおりsudo crontab -u www-data -eして*/5 * * * * /usr/bin/php -f /var/www/nextcloud/cron.phpを5分毎に実行するようにcronを設定する。

みたいなメッセージが出力されたら APCu の設定には問題がありません。何も出力されなかった場合は上記の設定を確認してください。

とあるけど、

/var/www/nextcloud/cron.php

        // Log the successful cron execution
        $config->setAppValue('core', 'lastcron', time());

あたりにecho "success";と追記したら、それだけが出力されたから、何も出力されないのが問題ない、ということなのでは?どちらにせよ、ジョブが保留になっています、エラーは消えた。

Memcacheが有効でないというエラー

しかし、画面には表示されないOC\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)というエラーが表示される。

sudo apt install php8.0-memcached php8.0-apcuしても駄目。

回答は、先程の引用元サイトにもあるし、こちらにも同じことが書いてある。 なんかnextcloudのバックグラウンドジョブが動いてないんですけどー | くらげぜり~

etc/php/8.0/cli/php.ini

apc.enable_cli=1

「コマンドラインからのPHP実行時にAPCuを有効にする」という設定

をファイル末尾に追記。

ご使用のシステムには、デフォルトの電話地域が設定されていません。

こちらも警告どおりだが、 Nextcloud 21のセキュリティ&セットアップ警告の修正 default_phone_region(電話地域)を設定 – matoken’s memeにあるとおり

/var/www/nextcloud/config/config.php

  'default_phone_region' ⇒ 'JP',

を追記する。

データベースにいくつかのインデックスがありません。

いつものとおりsudo -u www-data php /var/www/nextcloud/occ db:add-missing-indicesを実行する。

このインスタンスのphp-imagickモジュールはSVGをサポートしていません。

sudo apt install php8.0-imagickしても解消されず。

上記にはsudo apt install libmagickcore-6.q16-6-extraとあるのだけど…

: パッケージ libmagickcore-6.q16-6-extra が見つかりません
E: 'libmagickcore-6.q16-6-extra' に一致するパッケージは見つかりませんでした
E: 正規表現 'libmagickcore-6.q16-6-extra' ではパッケージは見つかりませんでした

と見付からないので、sudo apt search libmagickcoreとすると

libmagickcore-6.q16-3-extra/bionic-updates,bionic-security,now 8:6.9.7.4+dfsg-16ubuntu6.12 amd64
  low-level image manipulation library - extra codecs (Q16)

とヒットしたのでsudo apt install libmagickcore-6.q16-3-extraをインストール。これで解消。


  1. なのにnextcloudは動き続けていた。 ↩︎