mirror of
https://git.yoctoproject.org/poky
synced 2026-04-20 09:32:13 +02:00
systemd: Use ${ROOT_HOME} instead of /root
systemd avoids using nss lookups for the root user, so naturally it assumes that root's home directory is /root. In OE that's not the case, and it can lead to long delays when shutting down due to user shutdown unit failures. (From OE-Core rev: e0e8a904cd287a23352e5713a93aeab3933e4563) Signed-off-by: Dan McGregor <dan.mcgregor@usask.ca> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
9aff3a4ec0
commit
ff5510b3fa
@@ -0,0 +1,180 @@
|
||||
From 4dc8dee0435bb63cbe474004b0a8df0363fe94dd Mon Sep 17 00:00:00 2001
|
||||
From: Dan McGregor <dan.mcgregor@usask.ca>
|
||||
Date: Fri, 5 Sep 2014 06:28:58 -0600
|
||||
Subject: [PATCH] Make root's home directory configurable.
|
||||
|
||||
OpenEmbedded has a configurable home directory for root. Allow
|
||||
systemd to be built using its idea of what root's home directory
|
||||
should be.
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Dan McGregor <dan.mcgregor@usask.ca>
|
||||
---
|
||||
Makefile.am | 2 ++
|
||||
configure.ac | 7 +++++++
|
||||
src/core/unit-printf.c | 2 +-
|
||||
src/nspawn/nspawn.c | 4 ++--
|
||||
src/shared/util.c | 4 ++--
|
||||
units/console-shell.service.m4.in | 4 ++--
|
||||
units/emergency.service.in | 4 ++--
|
||||
units/rescue.service.m4.in | 4 ++--
|
||||
8 files changed, 20 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index 4028112..5d18f5c 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -191,6 +191,7 @@ AM_CPPFLAGS = \
|
||||
-DKEXEC=\"$(KEXEC)\" \
|
||||
-DLIBDIR=\"$(libdir)\" \
|
||||
-DROOTLIBDIR=\"$(rootlibdir)\" \
|
||||
+ -DROOTHOMEDIR=\"$(roothomedir)\" \
|
||||
-DTEST_DIR=\"$(abs_top_srcdir)/test\" \
|
||||
-I $(top_srcdir)/src \
|
||||
-I $(top_builddir)/src/shared \
|
||||
@@ -5584,6 +5585,7 @@ EXTRA_DIST += \
|
||||
substitutions = \
|
||||
'|rootlibexecdir=$(rootlibexecdir)|' \
|
||||
'|rootbindir=$(rootbindir)|' \
|
||||
+ '|roothomedir=$(roothomedir)|' \
|
||||
'|bindir=$(bindir)|' \
|
||||
'|SYSTEMCTL=$(rootbindir)/systemctl|' \
|
||||
'|SYSTEMD_NOTIFY=$(rootbindir)/systemd-notify|' \
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 18b7198..365bc73 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1272,6 +1272,11 @@ AC_ARG_WITH([rootlibdir],
|
||||
[],
|
||||
[with_rootlibdir=${libdir}])
|
||||
|
||||
+AC_ARG_WITH([roothomedir],
|
||||
+ AS_HELP_STRING([--with-roothomedir=DIR], [Home directory for the root user]),
|
||||
+ [],
|
||||
+ [with_roothomedir=/root])
|
||||
+
|
||||
AC_ARG_WITH([pamlibdir],
|
||||
AS_HELP_STRING([--with-pamlibdir=DIR], [Directory for PAM modules]),
|
||||
[],
|
||||
@@ -1317,6 +1322,7 @@ AC_SUBST([pamlibdir], [$with_pamlibdir])
|
||||
AC_SUBST([pamconfdir], [$with_pamconfdir])
|
||||
AC_SUBST([rootprefix], [$with_rootprefix])
|
||||
AC_SUBST([rootlibdir], [$with_rootlibdir])
|
||||
+AC_SUBST([roothomedir], [$with_roothomedir])
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
Makefile po/Makefile.in
|
||||
@@ -1400,6 +1406,7 @@ AC_MSG_RESULT([
|
||||
include_prefix: ${INCLUDE_PREFIX}
|
||||
lib dir: ${libdir}
|
||||
rootlib dir: ${with_rootlibdir}
|
||||
+ root home dir: ${with_roothomedir}
|
||||
SysV init scripts: ${SYSTEM_SYSVINIT_PATH}
|
||||
SysV rc?.d directories: ${SYSTEM_SYSVRCND_PATH}
|
||||
Build Python: ${PYTHON}
|
||||
diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c
|
||||
index 62599d0..852d34c 100644
|
||||
--- a/src/core/unit-printf.c
|
||||
+++ b/src/core/unit-printf.c
|
||||
@@ -259,7 +259,7 @@ static int specifier_user_home(char specifier, void *data, void *userdata, char
|
||||
* best of it if we can, but fail if we can't */
|
||||
|
||||
if (!c->user || streq(c->user, "root") || streq(c->user, "0"))
|
||||
- n = strdup("/root");
|
||||
+ n = strdup(ROOTHOMEDIR);
|
||||
else
|
||||
return -ENOTSUP;
|
||||
|
||||
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
|
||||
index d01da45..3e876d5 100644
|
||||
--- a/src/nspawn/nspawn.c
|
||||
+++ b/src/nspawn/nspawn.c
|
||||
@@ -3312,7 +3312,7 @@ int main(int argc, char *argv[]) {
|
||||
if (r < 0)
|
||||
_exit(EXIT_FAILURE);
|
||||
|
||||
- if ((asprintf((char**)(envp + n_env++), "HOME=%s", home ? home: "/root") < 0) ||
|
||||
+ if ((asprintf((char**)(envp + n_env++), "HOME=%s", home ? home: ROOTHOMEDIR) < 0) ||
|
||||
(asprintf((char**)(envp + n_env++), "USER=%s", arg_user ? arg_user : "root") < 0) ||
|
||||
(asprintf((char**)(envp + n_env++), "LOGNAME=%s", arg_user ? arg_user : "root") < 0)) {
|
||||
log_oom();
|
||||
@@ -3402,7 +3402,7 @@ int main(int argc, char *argv[]) {
|
||||
} else if (argc > optind)
|
||||
execvpe(argv[optind], argv + optind, env_use);
|
||||
else {
|
||||
- chdir(home ? home : "/root");
|
||||
+ chdir(home ? home : ROOTHOMEDIR);
|
||||
execle("/bin/bash", "-bash", NULL, env_use);
|
||||
execle("/bin/sh", "-sh", NULL, env_use);
|
||||
}
|
||||
diff --git a/src/shared/util.c b/src/shared/util.c
|
||||
index 85a570a..aef6033 100644
|
||||
--- a/src/shared/util.c
|
||||
+++ b/src/shared/util.c
|
||||
@@ -4377,7 +4377,7 @@ int get_user_creds(
|
||||
*gid = 0;
|
||||
|
||||
if (home)
|
||||
- *home = "/root";
|
||||
+ *home = ROOTHOMEDIR;
|
||||
|
||||
if (shell)
|
||||
*shell = "/bin/sh";
|
||||
@@ -5363,7 +5363,7 @@ int get_home_dir(char **_h) {
|
||||
/* Hardcode home directory for root to avoid NSS */
|
||||
u = getuid();
|
||||
if (u == 0) {
|
||||
- h = strdup("/root");
|
||||
+ h = strdup(ROOTHOMEDIR);
|
||||
if (!h)
|
||||
return -ENOMEM;
|
||||
|
||||
diff --git a/units/console-shell.service.m4.in b/units/console-shell.service.m4.in
|
||||
index 3f4904a..e2af652 100644
|
||||
--- a/units/console-shell.service.m4.in
|
||||
+++ b/units/console-shell.service.m4.in
|
||||
@@ -15,8 +15,8 @@ After=rc-local.service
|
||||
Before=getty.target
|
||||
|
||||
[Service]
|
||||
-Environment=HOME=/root
|
||||
-WorkingDirectory=/root
|
||||
+Environment=HOME=@roothomedir@
|
||||
+WorkingDirectory=@roothomedir@
|
||||
ExecStart=-/sbin/sulogin
|
||||
ExecStopPost=-@SYSTEMCTL@ poweroff
|
||||
Type=idle
|
||||
diff --git a/units/emergency.service.in b/units/emergency.service.in
|
||||
index 91fc1bb..659547e 100644
|
||||
--- a/units/emergency.service.in
|
||||
+++ b/units/emergency.service.in
|
||||
@@ -13,8 +13,8 @@ Conflicts=shutdown.target
|
||||
Before=shutdown.target
|
||||
|
||||
[Service]
|
||||
-Environment=HOME=/root
|
||||
-WorkingDirectory=/root
|
||||
+Environment=HOME=@roothomedir@
|
||||
+WorkingDirectory=@roothomedir@
|
||||
ExecStartPre=-/bin/plymouth quit
|
||||
ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again\\nto boot into default mode.'
|
||||
ExecStart=-/bin/sh -c "/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default"
|
||||
diff --git a/units/rescue.service.m4.in b/units/rescue.service.m4.in
|
||||
index ef54369..7aad86f 100644
|
||||
--- a/units/rescue.service.m4.in
|
||||
+++ b/units/rescue.service.m4.in
|
||||
@@ -14,8 +14,8 @@ After=sysinit.target plymouth-start.service
|
||||
Before=shutdown.target
|
||||
|
||||
[Service]
|
||||
-Environment=HOME=/root
|
||||
-WorkingDirectory=/root
|
||||
+Environment=HOME=@roothomedir@
|
||||
+WorkingDirectory=@roothomedir@
|
||||
ExecStartPre=-/bin/plymouth quit
|
||||
ExecStartPre=-/bin/echo -e 'Welcome to rescue mode! Type "systemctl default" or ^D to enter default mode.\\nType "journalctl -xb" to view system logs. Type "systemctl reboot" to reboot.'
|
||||
ExecStart=-/bin/sh -c "/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default"
|
||||
--
|
||||
1.9.3
|
||||
|
||||
@@ -32,6 +32,7 @@ SRC_URI = "git://anongit.freedesktop.org/systemd/systemd;branch=master;protocol=
|
||||
file://uclibc-get-physmem.patch \
|
||||
file://0001-add-support-for-executing-scripts-under-etc-rcS.d.patch \
|
||||
file://0001-missing.h-add-fake-__NR_memfd_create-for-MIPS.patch \
|
||||
file://0001-Make-root-s-home-directory-configurable.patch \
|
||||
file://touchscreen.rules \
|
||||
file://00-create-volatile.conf \
|
||||
file://init \
|
||||
@@ -74,6 +75,7 @@ rootlibexecdir = "${rootprefix}/lib"
|
||||
# The gtk+ tools should get built as a separate recipe e.g. systemd-tools
|
||||
EXTRA_OECONF = " --with-rootprefix=${rootprefix} \
|
||||
--with-rootlibdir=${rootlibdir} \
|
||||
--with-roothomedir=${ROOT_HOME} \
|
||||
${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--enable-pam', '--disable-pam', d)} \
|
||||
--disable-manpages \
|
||||
--disable-coredump \
|
||||
@@ -99,7 +101,6 @@ do_configure_prepend() {
|
||||
else
|
||||
cp -r ${S}/units ${S}/units.pre_sed
|
||||
fi
|
||||
sed -i -e 's:=/root:=${ROOT_HOME}:g' ${S}/units/*.service*
|
||||
sed -i '/ln --relative --help/d' ${S}/configure.ac
|
||||
sed -i -e 's:\$(LN_S) --relative -f:lnr:g' ${S}/Makefile.am
|
||||
sed -i -e 's:\$(LN_S) --relative:lnr:g' ${S}/Makefile.am
|
||||
|
||||
Reference in New Issue
Block a user