All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v2 1/2] package/postgresql/postgresql.service: set locale for initdb to C
@ 2023-11-02 18:41 Adam Duskett
  2023-11-02 18:41 ` [Buildroot] [PATCH v2 2/2] support/testing/tests/package/test_postgresql.py: new test Adam Duskett
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Adam Duskett @ 2023-11-02 18:41 UTC (permalink / raw)
  To: buildroot; +Cc: Adam Duskett, Peter Seiderer

From: Peter Seiderer <ps.report@gmx.net>

Systemd creates a /etc/locale.conf file with LANG="C.UTF-8". On boot, systemd
reads /etc/locale.conf and sets the LANG environment variable,
(see the locale_context_load_conf method in local-setup.c.)

When initdb.c is called, a check for the LANG environment variable is called,
and if it is set to something other than "C" initdb attempts to load the
corresponding LC_CTYPE file in /usr/lib/locale/. IE: If LANG is set to C.UTF-8,
then initdb.c attempts to load /usr/lib/locale/C.UTF-8/LC_CTYPE. However, these
files do not exist on a Buildroot system, and as such, initdb throws the
following error on startup:

```
initdb: error: invalid locale settings; check LANG and LC_* environment variables
pg_ctl: database system initialization failed
```

To fix this issue, add "Environment=LANG=C" to the package provided
postgresql.service file to force Postgresql to use the C locale.

Tested-by: Adam Duskett <adam.duskett@amarulasolutions.com>
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
v1 -> v2:
  - Get to the root cause of the problem and provide a better explination of
    what is happening.

  - Use Environment=LANG=C isntead of -o --locale=C

 package/postgresql/postgresql.service | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/package/postgresql/postgresql.service b/package/postgresql/postgresql.service
index 539eea8964..c470c7181e 100644
--- a/package/postgresql/postgresql.service
+++ b/package/postgresql/postgresql.service
@@ -16,6 +16,10 @@ StandardOutput=syslog
 StandardError=syslog
 SyslogIdentifier=postgres
 
+# Overwrite the LANG variable to prevent systemd from passing the LANG
+# environment variable set in /etc/locale.conf.
+Environment=LANG=C
+
 ExecStartPre=/bin/sh -c "if [ ! -f /var/lib/pgsql/PG_VERSION ]; then /usr/bin/pg_ctl initdb -D /var/lib/pgsql; fi"
 ExecStart=/usr/bin/postgres -D /var/lib/pgsql
 ExecReload=/usr/bin/kill -HUP $MAINPID
-- 
2.41.0

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2023-12-24 22:10 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-02 18:41 [Buildroot] [PATCH v2 1/2] package/postgresql/postgresql.service: set locale for initdb to C Adam Duskett
2023-11-02 18:41 ` [Buildroot] [PATCH v2 2/2] support/testing/tests/package/test_postgresql.py: new test Adam Duskett
2023-12-18 17:31   ` Yann E. MORIN
2023-12-18 17:41     ` Adam Duskett
2023-12-18 18:10       ` Adam Duskett
2023-12-18 20:44       ` Yann E. MORIN
2023-12-18 21:40         ` Adam Duskett
2023-11-05 10:07 ` [Buildroot] [PATCH v2 1/2] package/postgresql/postgresql.service: set locale for initdb to C Peter Seiderer
2023-12-18 17:22 ` Yann E. MORIN
2023-12-18 17:28   ` Adam Duskett
2023-12-18 17:39     ` Yann E. MORIN
2023-12-18 17:44       ` Adam Duskett
2023-12-18 22:09         ` Adam Duskett
2023-12-24 22:10           ` Adam Duskett

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.