On Thu, 28.05.15 15:02, Martin Pitt (martin.p...@ubuntu.com) wrote: > Lennart Poettering [2015-05-28 13:05 +0200]: > > Nah, please remove this part. We should not ship that upstream. THis > > is something that Fedora's initscripts.rpm should provide eventually, > > and should be neither shipped with systemd upstream nor systemd.rpm in > > Fedora. > > OK, done. I changed it to be an example .SKELETON script in the > source/tarball now, but it's not installed. (Makes it easier for > packagers to adjust). > > Also added README/NEWS now.
Looks good. Please push! > > Martin > > -- > Martin Pitt | http://www.piware.de > Ubuntu Developer (www.ubuntu.com) | Debian Developer (www.debian.org) > From a23a4b6c0e2b156b8902b56eab65eb87c239a073 Mon Sep 17 00:00:00 2001 > From: Martin Pitt <martin.p...@ubuntu.com> > Date: Wed, 27 May 2015 17:04:49 +0200 > Subject: [PATCH] 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. > --- > Makefile.am | 1 + > NEWS | 11 +++++++ > README | 11 +++++++ > configure.ac | 20 ------------ > src/systemctl/systemctl.c | 11 +++---- > src/systemctl/systemd-sysv-install.SKELETON | 47 > +++++++++++++++++++++++++++++ > 6 files changed, 75 insertions(+), 26 deletions(-) > create mode 100755 src/systemctl/systemd-sysv-install.SKELETON > > diff --git a/Makefile.am b/Makefile.am > index d6010c5..b7d0add 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -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 > > diff --git a/NEWS b/NEWS > index ee533b4..2e2d1ce 100644 > --- a/NEWS > +++ b/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 > diff --git a/README b/README > index 2b8c68e..2be3972 100644 > --- a/README > +++ b/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 > diff --git a/configure.ac b/configure.ac > index 0818dd8..e46ca45 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -491,25 +491,6 @@ if test "x${have_ima}" != xno ; then > 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])) > if test "x$enable_selinux" != "xno"; then > @@ -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} > diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c > index f8e10a4..f0ba83d 100644 > --- a/src/systemctl/systemctl.c > +++ b/src/systemctl/systemctl.c > @@ -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); > } > > diff --git a/src/systemctl/systemd-sysv-install.SKELETON > b/src/systemctl/systemd-sysv-install.SKELETON > new file mode 100755 > index 0000000..a53a3e6 > --- /dev/null > +++ b/src/systemctl/systemd-sysv-install.SKELETON > @@ -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 > -- > 2.1.4 > > _______________________________________________ > systemd-devel mailing list > systemd-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/systemd-devel Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel