[Buildroot] [PATCH v2 1/2] package/postgresql/postgresql.service: set locale for initdb to C
Peter Seiderer
ps.report at gmx.net
Sun Nov 5 10:07:11 UTC 2023
Hello *,
On Thu, 2 Nov 2023 12:41:53 -0600, Adam Duskett <adam.duskett at amarulasolutions.com> wrote:
> From: Peter Seiderer <ps.report at 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 at amarulasolutions.com>
> Signed-off-by: Adam Duskett <adam.duskett at 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
And for the record the links to the original patch series/review comments:
https://patchwork.ozlabs.org/project/buildroot/patch/20200920150659.7562-1-ps.report@gmx.net/
https://patchwork.ozlabs.org/project/buildroot/patch/20200920150659.7562-2-ps.report@gmx.net/
https://patchwork.ozlabs.org/project/buildroot/patch/20200920150659.7562-3-ps.report@gmx.net/
Regards,
Peter
More information about the buildroot
mailing list