Nextcloudで PostgreSQLで使っているが、 サポート期限が過ぎていたので、14にまでアップグレードすることにした。
やりかたは以下を参照した。
- Ubuntu 20.04 LTS へ do-release-upgrade した後に Postgresql 10から12にアップグレードした話(pg_upgradecluster編) - Qiita
- 資料編:Ubuntu特有のPostgreSQL用コマンド | Let’s POSTGRES
バージョン確認
arimasou16@ubuntu:~$ sudo -u postgres psql
Password for user postgres:
psql (14.8 (Ubuntu 14.8-0ubuntu0.22.04.1), server 10.22 (Ubuntu 10.22-0ubuntu0.18.04.1))
Type "help" for help.
postgres=# select version();
postgres=# \q
バックアップ
バックアップ先を/tmp
配下としているのは、postgres
ユーザでも出力できるディレクトリなので。あと、何度かパスワード認証があった。
arimasou16@ubuntu:~$ sudo -u postgres pg_dumpall -f /tmp/postgres10-all.dump
Password:
Password:
Password:
Password:
Password:
arimasou16@ubuntu:~$ ls -l /tmp/postgres10-all.dump
-rw-rw-r-- 1 postgres postgres 79717576 8月 1 06:25 /tmp/postgres10-all.dump
クラスタを削除
本来、アップグレードするpostgres
のバージョン14をインストールするんだろうけど、Ubuntu22.04にアップグレードしたときに既にインストールされていたようで、db init
だけ実行されている状態だったので削除する。
arimasou16@ubuntu:~$ pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
10 main 5432 online postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
14 main 5434 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
arimasou16@ubuntu:~$ sudo pg_dropcluster 14 main --stop
アップグレード
sudo pg_upgradecluster -v 14 10 main
で一気にいけちゃうっぽい。そして、何度かパスワード認証があった。
arimasou16@ubuntu:~$ sudo pg_upgradecluster -v 14 10 main
Password for user postgres:
Password for user postgres:
Password for user postgres:
Stopping old cluster...
Restarting old cluster with restricted connections...
Notice: extra pg_ctl/postgres options given, bypassing systemctl for start operation
Creating new PostgreSQL cluster 14/main ...
/usr/lib/postgresql/14/bin/initdb -D /var/lib/postgresql/14/main --auth-local peer --auth-host scram-sha-256 --no-instructions --encoding UTF8 --lc-collate ja_JP.UTF-8 --lc-ctype ja_JP.UTF-8
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "ja_JP.UTF-8".
initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8"
The default text search configuration will be set to "simple".
Data page checksums are disabled.
・・・中略・・・
Analyzing database template1...
Stopping target cluster...
Stopping old cluster...
Disabling automatic startup of old cluster...
Starting upgraded cluster on port 5432...
Success. Please check that the upgraded cluster works. If it does,
you can remove the old cluster with
pg_dropcluster 10 main
Ver Cluster Port Status Owner Data directory Log file
10 main 5433 down postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
Ver Cluster Port Status Owner Data directory Log file
14 main 5432 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
アップグレード後、バージョン確認
version
----------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 14.8 (Ubuntu 14.8-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0, 64-bit
(1 row)
(END)
psコマンドで確認
arimasou16@ubuntu:~$ ps axwwu | grep postgres
postgres 626274 0.0 0.3 221960 30232 ? Ss 06:33 0:00 /usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf
postgres 626276 0.0 0.1 222116 13296 ? Ss 06:33 0:00 postgres: 14/main: checkpointer
postgres 626277 0.0 0.1 221960 9296 ? Ss 06:33 0:00 postgres: 14/main: background writer
postgres 626278 0.0 0.1 221960 11740 ? Ss 06:33 0:00 postgres: 14/main: walwriter
postgres 626279 0.0 0.1 222524 9552 ? Ss 06:33 0:00 postgres: 14/main: autovacuum launcher
postgres 626280 0.0 0.0 77152 7288 ? Ss 06:33 0:00 postgres: 14/main: stats collector
postgres 626281 0.0 0.0 222388 7848 ? Ss 06:33 0:00 postgres: 14/main: logical replication launcher
postgres 626657 0.1 0.2 223928 20648 ? Ss 06:36 0:00 postgres: 14/main: joplin joplin 127.0.0.1(49626) idle
古いクラスタ削除
sudo apt purge postgresql-10 postgresql-client-10 postgresql-12 postgresql-client-12
パスワード認証方式の変更
14から 21.5. パスワード認証のデフォルトがscram-sha-256方式になっている。 Nextcloudでもscram-sha-256方式対応しているらしいので、scram-sha-256方式に変更する。
- Postgresql scram-sha-256 support in Nextcloud - ℹ️ Support - Nextcloud community
- [Bug]: After upgrade from PostgreSQL 13 to 14, Nextcloud is KO · Issue #31030 · nextcloud/server · GitHub
joplinでも Database error - Development - Joplin Forumで14を使っているので変更できるものと判断。
docker image inspect d90853d279bd
でjoplin serverのイメージのバージョン確認すると、多分 2.9.5-beta。
"ContainerConfig": {
"Config": {
"Labels": {
"org.opencontainers.image.created": "2022-10-11T10:56:47+00:00",
"org.opencontainers.image.description": "Docker image for Joplin Server",
"org.opencontainers.image.revision": "e660faf",
"org.opencontainers.image.source": "https://github.com/laurent22/joplin.git",
"org.opencontainers.image.title": "Joplin Server",
"org.opencontainers.image.url": "https://joplinapp.org/",
"org.opencontainers.image.version": "2.9.5-beta"
}
},
}
コメントアウト。
/etc/postgresql/14/main/postgresql.conf
#password_encryption = md5 # md5 or scram-sha-256
md5
をscram-sha-256
に置換。
/etc/postgresql/14/main/pg_hba.conf
# Database administrative login by Unix domain socket
#local all postgres peer
local all postgres scram-sha-256
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
#local all all peer
local all all scram-sha-256
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
パスワード更新
因みにpostgresql
で確認するとmd5
とソルトなのか、先頭についている。
postgres=# select * from pg_user;
usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig
-----------+----------+-------------+----------+---------+--------------+-------------------------------------+----------+-----------
joplin | 16384 | f | f | f | f | md54ee6bf0521c64a83586ac1e85ef5de49 | |
nextcloud | 16385 | f | f | f | f | md5bdd82bd474e82500cfd6993a14d88da3 | |
postgres | 10 | t | t | t | t | md5c598968c0fd27b0cc657342a6d995db0 | |
(3 rows)
パスワード更新のALTER USER
をすれば、そのままパスワード認証方式に合わせて更新される。
ALTER USER postgres PASSWORD 'postgresNoPassword';
ALTER USER nextcloud PASSWORD 'nextcloudNoPassword';
ALTER USER joplin PASSWORD 'joplinNoPassword';
更新後はハッシュ値も見えなくなった。
postgres=# select * from pg_user;
usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig
-----------+----------+-------------+----------+---------+--------------+----------+----------+-----------
postgres | 10 | t | t | t | t | ******** | |
joplin | 16384 | f | f | f | f | ******** | |
nextcloud | 16385 | f | f | f | f | ******** | |
アプリの設定ファイル更新
joplin serverは起動で指定する環境変数ファイル .env。nextcloudは /var/www/nextcloud/config/config.php を書き換える。