On Sun, Oct 28, 2018 at 02:23:28PM +0100, Antoine Jacoutot wrote: > On Sun, Oct 28, 2018 at 02:20:48PM +0100, Sebastien Marie wrote: > > Hi, > > > > I just noted a behaviour change with the latest change on rc.subr: > > > > date: 2018/10/16 07:07:05; author: ajacoutot; state: Exp; lines: +2 > > -2; commitid: y1bnk7UTLXqW0ZFW; > > Change the way we call su(1) in rcexec: > > - drop `-'l' to prevent simulating a full login and running > > /root/.profile > > (prodded by a mail from J Greely) > > - use `-m' to preserve the environment because we now set HOME to "/" > > like > > /etc/rc does; note that we now also clear the environment using `env > > -i' before > > running su(1) which leaves us with only HOME, PATH and SHELL > > > > Committing early to catch regressions fast, if any. > > ok halex@ > > > > with `su -l', the current directory is changed, whereas with `su -m' it > > is unaffected. > > > > from su man page, about -l: > > and su will change directory to the target login's home directory. > > > > > > I found it because pg_ctl will fail if started in a directory it can't > > read. > > Perfect, I was expecting some regression, thanks for reporting. > I'll fix it within the next few days.
Thinking about it I wonder if this shouldn't just be "fixed" in the rc.d script itself. Manually running pg_ctl as root (from /root for example) would fail the same way. So I think it's more an issue with the way pg_ctl works. Thoughts? > > # pwd > > /root > > # rcctl start postgresql > > postgresql(failed) > > # rcctl -d start postgresql > > doing _rc_parse_conf > > doing _rc_quirks > > postgresql_flags empty, using default >-w -l /var/postgresql/logfile< > > doing _rc_parse_conf /var/run/rc.d/postgresql > > doing _rc_quirks > > doing rc_check > > could not identify current directory: Permission denied > > pg_ctl: no server running > > postgresql > > doing rc_start > > doing _rc_wait start > > doing rc_check > > could not identify current directory: Permission denied > > could not identify current directory: Permission denied > > could not identify current directory: Permission denied > > The program "postgres" is needed by pg_ctl but was not found in the > > same directory as "pg_ctl". > > Check your installation. > > could not identify current directory: Permission denied > > pg_ctl: no server running > > doing _rc_rm_runfile > > (failed) > > > > # cd / && rcctl start postgresql > > postgresql(ok) > > > > > > I am unsure about the correct solution. Maybe just having a `cd /' in > > rcexec ? it isn't the exact same behaviour (chdir to home directory), > > but at least / is expected to be readable. > > > > thanks. > > -- > > Sebastien Marie > > > > -- > Antoine -- Antoine
