Browse Source

Prep v231.3: Add --with-cgroup-controller=name to configure

This option can be used, if elogind is built while a different cgroup
controller than planned is active.
A valid scenario could be a gentoo user switching from systemd to
openrc+elogind.
keep-around/964a6d9fb555cc86528eb1cc1f6d044f85584842
Sven Eden 5 years ago
parent
commit
daa9b80cd2
  1. 26
      README
  2. 52
      configure.ac

26
README

@ -116,6 +116,32 @@ flag.
The PAM module is called pam_elogind.so, not pam_systemd.so.
Elogind and the running cgroup controller
-----------------------------------------
While 'configure' runs, it will detect which controller is in place.
If no controller is in place, configure will determine, that elogind
should be its own controller, which will be a very limited one.
This approach shoudl generally work, but if you just have no cgroup
controller in place, yet, or if you are currently switching to
another one, this approach will fail.
In this case you can do one of the two following things:
1) Boot your system with the target init system and cgroup
controller, before configuring and building elogind, or
2) Use the --with-cgroup-controller=name option.
Example: If you plan to use openrc, but openrc has not yet booted
the machine, you can use
--with-cgroup-controller=openrc
to let elogind know that openrc will be the controller
in charge.
However, if you set the controller at configure time to something
different than is in place, elogind will not start until that
controller is actively used as the primary controller.
License
-------

52
configure.ac

@ -111,20 +111,52 @@ fi
# ------------------------------------------------------------------------------
# Find running cgroup controller
# Let users set the cgroup controller to use, in case the target controller
# isn't currently running the show.
# Example: Gentoo Linux, user wants to switch from systemd to openrc+elogind,
# and emerges elogind before having booted the machine with openrc.
# See: https://github.com/elogind/elogind/issues/18
with_cgroupctrl=
AS_IF( [test -f /proc/self/cgroup], [
# If the init system is a cgroup controler, it will be position 1.
# Secondary controllers, like cgmanager, do not work.
with_cgroupctrl=`grep "^1:name=" /proc/self/cgroup | cut -d ':' -f 2`
AS_IF( [test -z "$with_cgroupctrl"], [
# Try to be our own cgroup controller
with_cgroupctrl="name=elogind"
AC_ARG_WITH([cgroup-controller],
AS_HELP_STRING([--with-cgroup-controller=name],
[Set the name of the cgroup controller to use.
Use this when the autodetection fails, or you plan to use your system with a different controller than the one in place now.
The value 'auto' (default) detects the running controller.
The values 'none' and 'elogind' will cause elogind to be its own (very limited) controller.
When elogind shall be its own controller, there *MUST NOT* be any other controller running!
Another popular controller would be 'openrc'.]),
[with_cgroupctrl=$withval],
[with_cgroupctrl=auto])
# ------------------------------------------------------------------------------
# Find running cgroup controller, if none was set
AS_IF( [test "x$with_cgroupctrl" = "xauto"], [
AS_IF([test -f /proc/self/cgroup], [
# If the init system is a cgroup controler, it will be position 1.
# Secondary controllers, like cgmanager, do not work.
with_cgroupctrl=`grep "^1:name=" /proc/self/cgroup | \
sed -n 's/.*=//p' | sed -e 's/:.*$//'`
AS_IF( [test -z "$with_cgroupctrl"], [
# Try to be our own cgroup controller
with_cgroupctrl="elogind"
])
], [
# 'auto' but no cgroup fs is a problem.
with_cgroupctrl=""
])
])
AS_IF( [test -z "$with_cgroupctrl"],
AC_MSG_ERROR([No running cgroup controller found]))
# If the user specified 'none', switch to 'elogind'.
# 'none' is allowed, as this means "there is no controller now"
AS_IF( [test "x$with_cgroupctrl" = "xnone"], [with_cgroupctrl=elogind])
# If this was not possible, /proc/self/cgroup not mounted yet, and 'auto'
# chosen, error out.
AS_IF( [test -z "$with_cgroupctrl"],
AC_MSG_ERROR([No running cgroup controller found]), [
# Otherwise add the 'name=' prefix
with_cgroupctrl="name=$with_cgroupctrl"
])
# ------------------------------------------------------------------------------
address_sanitizer_cflags=

Loading…
Cancel
Save