有馬総一郎のブログ

(彼氏の事情)

2023年09月30日 08:03:10 JST - 4 minute read - Linux

自宅サーバー利用者私だけだから実行できる適当なPostgreSQLの10から14へのアップグレード

NextcloudPostgreSQLで使っているが、 サポート期限が過ぎていたので、14にまでアップグレードすることにした。

やりかたは以下を参照した。

バージョン確認

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方式に変更する。

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

md5scram-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 を書き換える。