Frank Steiner:

[...] I see such messages:

About to execute: /bin/echo -e 'Welcome to emergency mode! After logging in, ...
Forked /bin/echo as 4290
Failed at step CHDIR spawning /bin/echo: No such file or directory


[...] But |/usr/lib/systemd/system/emergency.service| contains:

[Service]
Environment=HOME=/root
WorkingDirectory=/root
...
ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, ...
ExecStart=-/bin/sh -c "/sbin/sulogin; /usr/bin/systemctl --fail --no-block 
default"
...


[...] That was caused by |/root| being a symbolic link to |/local/home/root| [...]


Andrei Borzenkov:

[...] So I would vote for changing it to |/| as well.

|
/bin/echo| certainly doesn't care what its working directory is.

When it comes to the later |ExecStart|, which hasn't yet been reached in the scenario at hand, the convention is that the "userinit" part of the procedure (i.e. the part that sets up the environment variables like |HOME|||and changes working directory) is the responsibility of the login program. The |@SULOGIN@| that is Miquel van Smoorenburg's |sulogin| (as exemplified above) is no exception to this.

It /itself/ reads the home directory out of the password database, and changes directory to it and sets the |HOME| environment variable to it; without need for the invoking systemd unit to do so, and with less drastic failure modes in the absence of root's home directory or when the system administrator has decided that it isn't |/root|. Witness:

        if (chdir(pwd->pw_dir) < 0) {
                if (chdir("/") < 0)
                        fprintf(stderr, "sulogin: change of working directory 
failed: %m\n\r");
        }
_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to