Merge pull request #12910 from abbradar/postgresql-no-su

postgresql service: don't use su
This commit is contained in:
Eelco Dolstra 2016-02-10 12:01:06 +01:00
commit 652ff6902c

View File

@ -187,35 +187,37 @@ in
environment.PGDATA = cfg.dataDir; environment.PGDATA = cfg.dataDir;
path = [ pkgs.su postgresql ]; path = [ postgresql ];
preStart = preStart =
'' ''
# Initialise the database. # Create data directory.
if ! test -e ${cfg.dataDir}/PG_VERSION; then if ! test -e ${cfg.dataDir}/PG_VERSION; then
mkdir -m 0700 -p ${cfg.dataDir} mkdir -m 0700 -p ${cfg.dataDir}
rm -f ${cfg.dataDir}/*.conf rm -f ${cfg.dataDir}/*.conf
if [ "$(id -u)" = 0 ]; then chown -R postgres:postgres ${cfg.dataDir}
chown -R postgres ${cfg.dataDir}
su -s ${pkgs.stdenv.shell} postgres -c 'initdb -U root'
else
# For non-root operation.
initdb
fi fi
''; # */
script =
''
# Initialise the database.
if ! test -e ${cfg.dataDir}/PG_VERSION; then
initdb -U root
# See postStart! # See postStart!
touch "${cfg.dataDir}/.first_startup" touch "${cfg.dataDir}/.first_startup"
fi fi
ln -sfn "${configFile}" "${cfg.dataDir}/postgresql.conf" ln -sfn "${configFile}" "${cfg.dataDir}/postgresql.conf"
${optionalString (cfg.recoveryConfig != null) '' ${optionalString (cfg.recoveryConfig != null) ''
ln -sfn "${pkgs.writeText "recovery.conf" cfg.recoveryConfig}" \ ln -sfn "${pkgs.writeText "recovery.conf" cfg.recoveryConfig}" \
"${cfg.dataDir}/recovery.conf" "${cfg.dataDir}/recovery.conf"
''} ''}
''; # */
exec postgres ${toString flags}
'';
serviceConfig = serviceConfig =
{ ExecStart = "@${postgresql}/bin/postgres postgres ${toString flags}"; { ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
User = "postgres"; User = "postgres";
Group = "postgres"; Group = "postgres";
PermissionsStartOnly = true; PermissionsStartOnly = true;