# Rebuild fails: Data directory /shared/postgres\_data must not be owned by root

**URL:** https://meta.discourse.org/t/rebuild-fails-data-directory-shared-postgres-data-must-not-be-owned-by-root/350658
**Category:** Self-hosting
**Created:** [February 5, 2025, 3:45pm UTC](https://meta.discourse.org/t/rebuild-fails-data-directory-shared-postgres-data-must-not-be-owned-by-root/350658 "2025-02-05T15:45:52Z")
**Posts on this page:** 1
**Showing post:** 2

<div class="post-metadata">

### Author: ![JamesChevalier](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jameschevalier/32/116235_2.png) [@JamesChevalier](https://meta.discourse.org/u/JamesChevalier)
#### Post date: [February 5, 2025, 4:26pm UTC](https://meta.discourse.org/t/rebuild-fails-data-directory-shared-postgres-data-must-not-be-owned-by-root/350658/2 "2025-02-05T16:26:04Z")

</div>

Since I had documentation of the original (albeit incorrect) permissions, I decided to move forward with testing different `chown` variations. Ultimately, this set got me past that error:

```plaintext
chown -R messagebus:tss /var/discourse/shared/standalone/postgres_backup
chown -R messagebus:tss /var/discourse/shared/standalone/postgres_data
chown -R messagebus:tss /var/discourse/shared/standalone/postgres_run
chown -R messagebus:tss /var/discourse/shared/standalone/postgres_data_new
chown -R messagebus:tss /var/discourse/shared/standalone/postgres_data_older

```

I’m now met with the same error mentioned at [PostgreSQL 15 update - #61 by xFocus](https://meta.discourse.org/t/postgresql-15-update/349515/61) when I run `./launcher rebuild app`

> The source cluster was not shut down cleanly.  
> Failure, exiting

> **Full command output**
>
> ```plaintext
> x86_64 arch detected.
> Ensuring launcher is up to date
> Launcher is up-to-date
> 2.0.20250129-0720: Pulling from discourse/base
> Digest: sha256:01b8516e5504c0e9bc3707773015ff4407be03a89154194ff3b5b8699291bc26
> Status: Image is up to date for discourse/base:2.0.20250129-0720
> docker.io/discourse/base:2.0.20250129-0720
> /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
> /usr/local/bin/pups --stdin
> I, [2025-02-05T16:19:09.574812 #1] INFO -- : Reading from stdin
> I, [2025-02-05T16:19:09.605350 #1] INFO -- : File > /etc/service/postgres/run chmod: +x chown: 
> I, [2025-02-05T16:19:09.614043 #1] INFO -- : File > /etc/service/postgres/log/run chmod: +x chown: 
> I, [2025-02-05T16:19:09.626167 #1] INFO -- : File > /etc/runit/3.d/99-postgres chmod: +x chown: 
> I, [2025-02-05T16:19:09.634599 #1] INFO -- : File > /root/install_postgres chmod: +x chown: 
> I, [2025-02-05T16:19:09.643169 #1] INFO -- : File > /root/upgrade_postgres chmod: +x chown: 
> I, [2025-02-05T16:19:09.644682 #1] INFO -- : Replacing data_directory = '/var/lib/postgresql/15/main' with data_directory = '/shared/postgres_data' in /etc/postgresql/15/main/postgresql.conf
> I, [2025-02-05T16:19:09.646186 #1] INFO -- : Replacing (?-mix:#?listen_addresses *=.*) with listen_addresses = '*' in /etc/postgresql/15/main/postgresql.conf
> I, [2025-02-05T16:19:09.653810 #1] INFO -- : Replacing (?-mix:#?synchronous_commit *=.*) with synchronous_commit = $db_synchronous_commit in /etc/postgresql/15/main/postgresql.conf
> I, [2025-02-05T16:19:09.655422 #1] INFO -- : Replacing (?-mix:#?shared_buffers *=.*) with shared_buffers = $db_shared_buffers in /etc/postgresql/15/main/postgresql.conf
> I, [2025-02-05T16:19:09.656864 #1] INFO -- : Replacing (?-mix:#?work_mem *=.*) with work_mem = $db_work_mem in /etc/postgresql/15/main/postgresql.conf
> I, [2025-02-05T16:19:09.657789 #1] INFO -- : Replacing (?-mix:#?default_text_search_config *=.*) with default_text_search_config = '$db_default_text_search_config' in /etc/postgresql/15/main/postgresql.conf
> I, [2025-02-05T16:19:09.659640 #1] INFO -- : Replacing (?-mix:#?checkpoint_segments *=.*) with checkpoint_segments = $db_checkpoint_segments in /etc/postgresql/15/main/postgresql.conf
> I, [2025-02-05T16:19:09.660906 #1] INFO -- : Replacing (?-mix:#?logging_collector *=.*) with logging_collector = $db_logging_collector in /etc/postgresql/15/main/postgresql.conf
> I, [2025-02-05T16:19:09.661925 #1] INFO -- : Replacing (?-mix:#?log_min_duration_statement *=.*) with log_min_duration_statement = $db_log_min_duration_statement in /etc/postgresql/15/main/postgresql.conf
> I, [2025-02-05T16:19:09.663114 #1] INFO -- : Replacing (?-mix:^#local +replication +postgres +peer$) with local replication postgres peer in /etc/postgresql/15/main/pg_hba.conf
> I, [2025-02-05T16:19:09.663912 #1] INFO -- : Replacing (?-mix:^host.*all.*all.*127.*$) with host all all 0.0.0.0/0 md5 in /etc/postgresql/15/main/pg_hba.conf
> I, [2025-02-05T16:19:09.664817 #1] INFO -- : Replacing (?-mix:^host.*all.*all.*::1\/128.*$) with host all all ::/0 md5 in /etc/postgresql/15/main/pg_hba.conf
> I, [2025-02-05T16:19:09.665701 #1] INFO -- : > if [-f /root/install_postgres]; then
> /root/install_postgres && rm -f /root/install_postgres
> elif [-e /shared/postgres_run/.s.PGSQL.5432]; then
> socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
> fi
> 
> initdb: warning: enabling "trust" authentication for local connections
> initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
> W: https://dl.yarnpkg.com/debian/dists/stable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
> debconf: delaying package configuration, since apt-utils is not installed
> I, [2025-02-05T16:19:29.797884 #1] INFO -- : Generating locales (this might take a while)...
> en_US.UTF-8... done
> Generation complete.
> Upgrading PostgreSQL from version 13 to 15
> 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 "en_US.UTF-8".
> The default database encoding has accordingly been set to "UTF8".
> The default text search configuration will be set to "english".
> 
> Data page checksums are disabled.
> 
> fixing permissions on existing directory /shared/postgres_data_new ... ok
> creating subdirectories ... ok
> selecting dynamic shared memory implementation ... posix
> selecting default max_connections ... 100
> selecting default shared_buffers ... 128MB
> selecting default time zone ... Etc/UTC
> creating configuration files ... ok
> running bootstrap script ... ok
> performing post-bootstrap initialization ... ok
> syncing data to disk ... ok
> 
> Success. You can now start the database server using:
> 
> /usr/lib/postgresql/15/bin/pg_ctl -D /shared/postgres_data_new -l logfile start
> 
> Get:1 http://deb.debian.org/debian bookworm-backports InRelease [59.0 kB]
> Get:2 http://deb.debian.org/debian bookworm InRelease [151 kB]
> Get:3 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
> Get:4 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
> Get:5 https://dl.yarnpkg.com/debian stable InRelease [17.1 kB]
> Get:6 https://deb.nodesource.com/node_22.x nodistro InRelease [12.1 kB]
> Get:7 http://deb.debian.org/debian bookworm-backports/main amd64 Packages [282 kB]
> Get:8 http://deb.debian.org/debian bookworm/main amd64 Packages [8,792 kB]
> Get:9 http://deb.debian.org/debian bookworm-updates/main amd64 Packages [13.5 kB]
> Get:10 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg InRelease [129 kB]
> Get:11 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [243 kB]
> Get:12 https://dl.yarnpkg.com/debian stable/main amd64 Packages [10.9 kB]
> Get:13 https://dl.yarnpkg.com/debian stable/main all Packages [10.9 kB]
> Get:14 https://deb.nodesource.com/node_22.x nodistro/main amd64 Packages [5,274 B]
> Get:15 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 Packages [360 kB]
> Fetched 10.2 MB in 3s (3,942 kB/s)
> Reading package lists...
> Reading package lists...
> Building dependency tree...
> Reading state information...
> The following additional packages will be installed:
> postgresql-client-13
> Suggested packages:
> postgresql-doc-13
> The following NEW packages will be installed:
> postgresql-13 postgresql-13-pgvector postgresql-client-13
> 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
> Need to get 17.3 MB of archives.
> After this operation, 56.7 MB of additional disk space will be used.
> Get:1 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-client-13 amd64 13.18-1.pgdg120+1 [1,523 kB]
> Get:2 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-13 amd64 13.18-1.pgdg120+1 [15.4 MB]
> Get:3 https://apt.postgresql.org/pub/repos/apt bookworm-pgdg/main amd64 postgresql-13-pgvector amd64 0.8.0-1.pgdg120+1 [297 kB]
> Fetched 17.3 MB in 2s (9,988 kB/s)
> Selecting previously unselected package postgresql-client-13.
> (Reading database ... 33363 files and directories currently installed.)
> Preparing to unpack .../postgresql-client-13_13.18-1.pgdg120+1_amd64.deb ...
> Unpacking postgresql-client-13 (13.18-1.pgdg120+1) ...
> Selecting previously unselected package postgresql-13.
> Preparing to unpack .../postgresql-13_13.18-1.pgdg120+1_amd64.deb ...
> Unpacking postgresql-13 (13.18-1.pgdg120+1) ...
> Selecting previously unselected package postgresql-13-pgvector.
> Preparing to unpack .../postgresql-13-pgvector_0.8.0-1.pgdg120+1_amd64.deb ...
> Unpacking postgresql-13-pgvector (0.8.0-1.pgdg120+1) ...
> Setting up postgresql-client-13 (13.18-1.pgdg120+1) ...
> Setting up postgresql-13 (13.18-1.pgdg120+1) ...
> Creating new PostgreSQL cluster 13/main ...
> /usr/lib/postgresql/13/bin/initdb -D /var/lib/postgresql/13/main --auth-local peer --auth-host md5
> 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 "C.UTF-8".
> The default database encoding has accordingly been set to "UTF8".
> The default text search configuration will be set to "english".
> 
> Data page checksums are disabled.
> 
> fixing permissions on existing directory /var/lib/postgresql/13/main ... ok
> creating subdirectories ... ok
> selecting dynamic shared memory implementation ... posix
> selecting default max_connections ... 100
> selecting default shared_buffers ... 128MB
> selecting default time zone ... Etc/UTC
> creating configuration files ... ok
> running bootstrap script ... ok
> performing post-bootstrap initialization ... ok
> syncing data to disk ... ok
> 
> Success. You can now start the database server using:
> 
> pg_ctlcluster 13 main start
> 
> invoke-rc.d: could not determine current runlevel
> invoke-rc.d: policy-rc.d denied execution of start.
> Setting up postgresql-13-pgvector (0.8.0-1.pgdg120+1) ...
> Processing triggers for postgresql-common (267.pgdg120+1) ...
> Building PostgreSQL dictionaries from installed myspell/hunspell packages...
> Removing obsolete dictionary files:
> Stopping PostgreSQL 13 database server: main.
> Stopping PostgreSQL 15 database server: main.
> Performing Consistency Checks
> -----------------------------
> Checking cluster versions ok
> 
> The source cluster was not shut down cleanly.
> Failure, exiting
> -------------------------------------------------------------------------------------
> UPGRADE OF POSTGRES FAILED
> 
> Please visit https://meta.discourse.org/t/postgresql-15-update/349515 for support.
> 
> You can run ./launcher start app to restart your app in the meanwhile
> -------------------------------------------------------------------------------------
> 
> FAILED
> --------------------
> Pups::ExecError: if [-f /root/install_postgres]; then
> /root/install_postgres && rm -f /root/install_postgres
> elif [-e /shared/postgres_run/.s.PGSQL.5432]; then
> socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
> fi
> failed with return #<Process::Status: pid 18 exit 1>
> Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
> exec failed with the params {"tag"=>"db", "cmd"=>"if [-f /root/install_postgres]; then\n /root/install_postgres && rm -f /root/install_postgres\nelif [-e /shared/postgres_run/.s.PGSQL.5432]; then\n socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1\nfi\n"}
> bootstrap failed with exit code 1
> **FAILED TO BOOTSTRAP** please scroll up and look for earlier error messages, there may be more than one.
> ./discourse-doctor may help diagnose the problem.
> e2940f8bb9e51f0f290e0b6cb78257d5fa5d7563542591405689531d1af8432b
> 
> ```

In that other thread, it was suggested to check the output of  
`tail /var/discourse/shared/standalone/log/var-log/postgres/current`

```plaintext
2025-02-05 01:03:07.494 UTC [567] LOG: received smart shutdown request
2025-02-05 01:03:08.698 UTC [567] LOG: background worker "logical replication launcher" (PID 593) exited with exit code 1
2025-02-05 01:03:08.701 UTC [588] LOG: shutting down
2025-02-05 01:03:08.786 UTC [567] LOG: database system is shut down
2025-02-05 01:03:34.209 UTC [565] LOG: starting PostgreSQL 13.14 (Debian 13.14-1.pgdg110+2) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2025-02-05 01:03:34.211 UTC [565] LOG: listening on IPv4 address "0.0.0.0", port 5432
2025-02-05 01:03:34.211 UTC [565] LOG: listening on IPv6 address "::", port 5432
2025-02-05 01:03:34.222 UTC [565] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2025-02-05 01:03:34.261 UTC [587] LOG: database system was shut down at 2025-02-05 01:03:08 UTC
2025-02-05 01:03:34.339 UTC [565] LOG: database system is ready to accept connections

```

There were also mentions of stopping processes etc, but I currently have zero running containers, so that doesn’t seem to apply to my situation.

I have _absolutely_ no idea what to do from here.

---

_[View the full topic](https://meta.discourse.org/t/rebuild-fails-data-directory-shared-postgres-data-must-not-be-owned-by-root/350658)._
