環境はTrueNAS-12.0-U8.1で、Nextcloud 23.0を24.0.5へバージョンアップする。元々のNextcloudはTrueNAS 12をインストールした時に構築したもので、TruneNASが12.0-U8.1へマイナーアップデートした時にプラグインのプリセットも更新されたというのがきっかけである。
今回のプラグインアップデートではJailがFreeBSD 12.2-RELEASEから12.3-RELEASEにアップグレードされる。ところでホストのTrueNASは
% uname -a
FreeBSD freenas.local 12.2-RELEASE-p14 FreeBSD 12.2-RELEASE-p14 325282c09a5(HEAD) TRUENAS amd64
ということで、ホストよりもJailの方がバージョンが上になるが、メジャーバージョンのv12が同一であれば、ホストとJail間でメイナーバージョンが異なることは問題にならない。
目次
準備
スナップショットを取る
## jail名の確認 % iocage list ## snpshotを取る % sudo snapshot <Jail名> -n <スナップショット名> ## 元に戻す % sudo iocage rollback -n <スナップショット名> <Jail名>
Nextcloudをメンテナンスモードに変更する
$ sudo su -m www ## シェルをwww権限に切り替える % crontab -l > mycron.txt ## バックアップ % crontab -e (cronの設定をコメントアウトしておく) % exit ## www権限から出る
nextcloudをメンテナンスモードにして外部アクセスを止める。これもwww権限でシェルを実行する。
% cd /usr/local/www/nextcloud % php ./occ maintenance:mode --on
Nextcloudがメンテナンスモード画面へ移行して停止する。
大きなデータの退避
Nextcloudのdataディレクトリの大きなファイルを退避する。
アップグレード処理に入る前に自動でNextcloudのディレクトリ全体に対してコピーバックアップが行われる。この時、ユーザーデータやサムネイル画像のデータが大量であるとコピーに時間がかかるしディスク領域を圧迫するため退避する。先にスナップショットをとっているのでコピーバックアップせずに退避で問題ない。 /usr/local/www/nextcloud/data/<ユーザー名> や Web表示用の各写真のプレビュー画像が入っている /usr/local/www/nextcloud/data/appdata_xxxxxxxxxx/preview を別の場所へ退避させる。
退避先はどこでも良いが、/usr/local/www/nextcloud/ の外へ退避する。ここで退避したディレクトリは、アップグレード作業終了後に手作業で元の場所に戻す。
アップグレード
updateとupgradeの違い
- update Jail内のNextcloudのバージョンアップ
- upgrade JailのFreeBSDのバージョンも同時に上げる
アップグレードコマンドの実行
% sudo iocage upgrade -r <インストールするFreeBSDのバージョン> <Jail名>
% sudo iocage upgrade -r 12.3-RELEASE nextcloud Password: Snapshotting dev-nextcloud… (スナップショットは自動で取ってくれる) Updating plugin INDEX... Updating plugin artifact... Cloning git repository Branch 12.2-RELEASE does not exist at https://github.com/freenas/iocage-plugin-nextcloud.git! Using "master" branch for plugin, this may not work with your RELEASE Running upgrade... ・・・(略) Number of packages to be removed: 213 (これがたくさん出るけれど無視) lua script failed lua script failed lua script failed pkg: warning: database version 36 is newer than libpkg(3) version 35, but still compatible pkg: warning: database version 36 is newer than libpkg(3) version 35, but still compatible nextcloud-php74-24.0.5: missing file /usr/local/www/nextcloud/config/CAN_INSTALL nextcloud-php74-24.0.5: missing file /usr/local/www/nextcloud/config/CAN_INSTALL ・・・(略) (必要に応じて指示に従う。セキュリティ上、気にするのであれば指示通りに不要になったユーザーを後で削除しておく) [dev-nextcloud] [16/213] Deleting files for avahi-app-0.8: .......... done pkg: lua script failed ==> You should manually remove the "avahi" user. pkg: lua script failed ==> You should manually remove the "avahi" group pkg: lua script failed [dev-nextcloud] [19/213] Deleting files for mysql80-server-8.0.29: .......... done pkg: lua script failed ==> You should manually remove the "mysql" user. pkg: lua script failed ==> You should manually remove the "mysql” group [dev-nextcloud] [31/218] Deleting files for dbus-1.12.20_5: .......... done lua script failed ==> You should manually remove the "messagebus" user. lua script failed ==> You should manually remove the "messagebus" group lua script failed
[dev-nextcloud] [19/213] Deinstalling mysql80-server-8.0.29... pkg: Failed to execute lua script: [string "-- args: etc/mysql/my.cnf.sample..."]:12: attempt to call a nil value (field 'filecmp’) Installing plugin packages: - ffmpeg... - nextcloud-php74... - php74-pecl-imagick-im7... - php74-pecl-imagick-im7 failed to install, retry #1 - php74-bcmath... - php74-gmp... - php74-pcntl... - php74-pecl-redis... - php74-pecl-redis failed to install, retry #1 - nginx... - nginx failed to install, retry #1 - mysql80-server... - mysql80-server failed to install, retry #1 - redis... - py39-fail2ban... - py39-fail2ban failed to install, retry #1 - py39-certbot... - py39-certbot failed to install, retry #1 Cloning git repository * [migrate] Migrating from 0 to 1. writing new private key to '/usr/local/etc/letsencrypt/live/truenas/server.key' —— (エラーが出るが我慢して待つ) Starting mysql. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) MariaDB is unavailable - sleeping ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) MariaDB is unavailable - sleeping mysql: [Warning] Using a password on the command line interface can be insecure. ・・・(略) Nextcloud or one of the apps require upgrade - only a limited number of commands are available You may use your browser or the occ upgrade command to do the upgrade Set mode for background jobs to ‘cron' You may use your browser or the occ upgrade command to do the upgrade ERROR - Fail to run migrations. Saving debug log to /var/log/letsencrypt/letsencrypt.log No certificates found. Saving debug log to /var/log/letsencrypt/letsencrypt.log nextcloud successfully upgraded!
完了チェック
% iocage list +-----+-------------------+-------+--------------+------------------+ | JID | NAME | STATE | RELEASE | IP4 | +=====+===================+=======+==============+==================+ | 18 | nextcloud | up | 12.3-RELEASE | 192.168.0.123 |
NextcloudのJailを再起動。
% sudo iocage stop nextcloud % sudo iocage start nextcloud
Nextcloudを元の状態に戻す
sudoの再インストール
Nextcloudのデータファイルを元に戻す
cronを一時的に止めておく
Nextcloudのメンテナンスモードを解除
www権限で % cd /usr/local/www/nextcloud % php ./occ maintenance:mode —off (データアップグレードが必要の旨メッセージが出る) Nextcloud or one of the apps require upgrade - only a limited number of commands are available You may use your browser or the occ upgrade command to do the upgrade Maintenance mode disabled
(Nextcoudのシェルに入りwww権限で) % cd /usr/local/www/nextcloud % php ./occ upgrade Nextcloud or one of the apps require upgrade - only a limited number of commands are available You may use your browser or the occ upgrade command to do the upgrade Setting log level to debug Turned on maintenance mode Updating database schema ・・・(略) Update successful Turned off maintenance mode Resetting log level
この後、Nextcloudの通常画面が表示できるようになればOK。ログインcookieも引き継がれているので、すぐ表示できるはず。
Nextcloudの設定画面 > 概要を見ると、DBのindexを生成するようにと指示が表示されている。指示通りのコマンドを打つ。
www権限で % cd /usr/local/www/nextcloud % php ./occ db:add-missing-indices
0 件のコメント:
コメントを投稿