mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-22 13:33:56 +03:00
systemctl: drop hardcoded chkconfig invocation
Introduce /usr/lib/systemd/systemd-sysv-install [--root=] <action> <name> abstraction, replacing the direct calling of chkconfig. This allows distributions to call their specific tools like update-rc.d without patching systemd. Ship systemd-sysv-install.SKELETON as an example for packagers how to implement this. Drop the --enable-chkconfig configure option. Document this in README and point to it in NEWS.
This commit is contained in:
parent
d31dd62ba2
commit
0f0467e63b
@ -627,6 +627,7 @@ systemgenerator_PROGRAMS += \
|
||||
endif
|
||||
|
||||
EXTRA_DIST += \
|
||||
src/systemctl/systemd-sysv-install.SKELETON \
|
||||
units/rc-local.service.in \
|
||||
units/halt-local.service.in
|
||||
|
||||
|
11
NEWS
11
NEWS
@ -1,5 +1,16 @@
|
||||
systemd System and Service Manager
|
||||
|
||||
CHANGES WITH 221:
|
||||
|
||||
* Support for chkconfig (--enable-chkconfig) was removed in favour of
|
||||
calling an abstraction /lib/systemd/systemd-sysv-install. This needs
|
||||
to be implemented for your distribution. See "SYSV INIT.D SCRIPTS" in
|
||||
README for details.
|
||||
|
||||
Contributions from: ...
|
||||
|
||||
-- Berlin, UNRELEASED
|
||||
|
||||
CHANGES WITH 220:
|
||||
|
||||
* The gudev library has been extracted into a separate repository
|
||||
|
11
README
11
README
@ -222,6 +222,17 @@ NSS:
|
||||
|
||||
hosts: files mymachines resolve myhostname
|
||||
|
||||
SYSV INIT.D SCRIPTS:
|
||||
When calling "systemctl enable/disable/is-enabled" on a unit which is a
|
||||
SysV init.d script, it calls /usr/lib/systemd/systemd-sysv-install;
|
||||
this needs to translate the action into the distribution specific
|
||||
mechanism such as chkconfig or update-rc.d. Packagers need to provide
|
||||
this script if you need this functionality (you don't if you disabled
|
||||
SysV init support).
|
||||
|
||||
Please see src/systemctl/systemd-sysv-install.SKELETON for how this
|
||||
needs to look like, and provide an implementation at the marked places.
|
||||
|
||||
WARNINGS:
|
||||
systemd will warn you during boot if /etc/mtab is not a
|
||||
symlink to /proc/mounts. Please ensure that /etc/mtab is a
|
||||
|
20
configure.ac
20
configure.ac
@ -490,25 +490,6 @@ if test "x${have_ima}" != xno ; then
|
||||
AC_DEFINE(HAVE_IMA, 1, [Define if IMA is available])
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
have_chkconfig=yes
|
||||
AC_ARG_ENABLE([chkconfig], AS_HELP_STRING([--disable-chkconfig],[Disable optional chkconfig support]),
|
||||
[case "${enableval}" in
|
||||
yes) have_chkconfig=yes ;;
|
||||
no) have_chkconfig=no ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --disable-chkconfig) ;;
|
||||
esac],
|
||||
[AC_PATH_PROG(CHKCONFIG, chkconfig)
|
||||
if test -z "$CHKCONFIG"; then
|
||||
have_chkconfig=no
|
||||
else
|
||||
have_chkconfig=yes
|
||||
fi])
|
||||
|
||||
if test "x${have_chkconfig}" != xno ; then
|
||||
AC_DEFINE(HAVE_CHKCONFIG, 1, [Define if CHKCONFIG is available])
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
have_selinux=no
|
||||
AC_ARG_ENABLE(selinux, AS_HELP_STRING([--disable-selinux], [Disable optional SELINUX support]))
|
||||
@ -1541,7 +1522,6 @@ AC_MSG_RESULT([
|
||||
GCRYPT: ${have_gcrypt}
|
||||
QRENCODE: ${have_qrencode}
|
||||
MICROHTTPD: ${have_microhttpd}
|
||||
CHKCONFIG: ${have_chkconfig}
|
||||
GNUTLS: ${have_gnutls}
|
||||
libcurl: ${have_libcurl}
|
||||
libidn: ${have_libidn}
|
||||
|
@ -5098,7 +5098,7 @@ static int import_environment(sd_bus *bus, char **args) {
|
||||
static int enable_sysv_units(const char *verb, char **args) {
|
||||
int r = 0;
|
||||
|
||||
#if defined(HAVE_SYSV_COMPAT) && defined(HAVE_CHKCONFIG)
|
||||
#if defined(HAVE_SYSV_COMPAT)
|
||||
unsigned f = 0;
|
||||
_cleanup_lookup_paths_free_ LookupPaths paths = {};
|
||||
|
||||
@ -5123,7 +5123,7 @@ static int enable_sysv_units(const char *verb, char **args) {
|
||||
_cleanup_free_ char *p = NULL, *q = NULL, *l = NULL;
|
||||
bool found_native = false, found_sysv;
|
||||
unsigned c = 1;
|
||||
const char *argv[6] = { "/sbin/chkconfig", NULL, NULL, NULL, NULL };
|
||||
const char *argv[6] = { ROOTLIBEXECDIR "/systemd-sysv-install", NULL, NULL, NULL, NULL };
|
||||
char **k;
|
||||
int j;
|
||||
pid_t pid;
|
||||
@ -5161,15 +5161,13 @@ static int enable_sysv_units(const char *verb, char **args) {
|
||||
if (!found_sysv)
|
||||
continue;
|
||||
|
||||
log_info("%s is not a native service, redirecting to /sbin/chkconfig.", name);
|
||||
log_info("%s is not a native service, redirecting to systemd-sysv-install", name);
|
||||
|
||||
if (!isempty(arg_root))
|
||||
argv[c++] = q = strappend("--root=", arg_root);
|
||||
|
||||
argv[c++] = verb;
|
||||
argv[c++] = basename(p);
|
||||
argv[c++] =
|
||||
streq(verb, "enable") ? "on" :
|
||||
streq(verb, "disable") ? "off" : "--level=5";
|
||||
argv[c] = NULL;
|
||||
|
||||
l = strv_join((char**)argv, " ");
|
||||
@ -5185,6 +5183,7 @@ static int enable_sysv_units(const char *verb, char **args) {
|
||||
/* Child */
|
||||
|
||||
execv(argv[0], (char**) argv);
|
||||
log_error("Failed to execute %s: %m", argv[0]);
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
47
src/systemctl/systemd-sysv-install.SKELETON
Executable file
47
src/systemctl/systemd-sysv-install.SKELETON
Executable file
@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
# This script is called by "systemctl enable/disable" when the given unit is a
|
||||
# SysV init.d script. It needs to call the distribution's mechanism for
|
||||
# enabling/disabling those, such as chkconfig, update-rc.d, or similar. This
|
||||
# can optionally take a --root argument for enabling a SysV init script
|
||||
# in a chroot or similar.
|
||||
set -e
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [--root=path] enable|disable|is-enabled <sysv script name>" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# parse options
|
||||
eval set -- "$(getopt -o r: --long root: -- "$@")"
|
||||
while true; do
|
||||
case "$1" in
|
||||
-r|--root)
|
||||
ROOT="$2"
|
||||
shift 2 ;;
|
||||
--) shift ; break ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
done
|
||||
|
||||
NAME="$2"
|
||||
[ -n "$NAME" ] || usage
|
||||
|
||||
case "$1" in
|
||||
enable)
|
||||
# call the command to enable SysV init script $NAME here
|
||||
# (consider optional $ROOT)
|
||||
echo "IMPLEMENT ME: enabling SysV init.d script $NAME"
|
||||
;;
|
||||
disable)
|
||||
# call the command to disable SysV init script $NAME here
|
||||
# (consider optional $ROOT)
|
||||
echo "IMPLEMENT ME: disabling SysV init.d script $NAME"
|
||||
;;
|
||||
is-enabled)
|
||||
# exit with 0 if $NAME is enabled, non-zero if it is disabled
|
||||
# (consider optional $ROOT)
|
||||
echo "IMPLEMENT ME: checking SysV init.d script $NAME"
|
||||
;;
|
||||
*)
|
||||
usage ;;
|
||||
esac
|
Loading…
Reference in New Issue
Block a user