diff --git a/.github/advanced-issue-labeler.yml b/.github/advanced-issue-labeler.yml
index 20170c8d38..4e19392598 100644
--- a/.github/advanced-issue-labeler.yml
+++ b/.github/advanced-issue-labeler.yml
@@ -121,9 +121,6 @@ policy:
- name: sysusers
keys: ['systemd-sysusers']
- - name: sysv
- keys: ['systemd-sysv-generator']
-
- name: tests
keys: ['tests']
diff --git a/.github/labeler.yml b/.github/labeler.yml
index 14b07ea492..65ac975025 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -172,9 +172,6 @@ pstore:
random-seed:
- changed-files:
- any-glob-to-any-file: '**/*random-seed*'
-rc-local-generator:
- - changed-files:
- - any-glob-to-any-file: 'src/rc-local-generator/*'
remount-fs:
- changed-files:
- any-glob-to-any-file: '**/*remount-fs*'
@@ -268,12 +265,6 @@ sysupdate:
sysusers:
- changed-files:
- any-glob-to-any-file: '**/*sysusers*'
-sysv-generator:
- - changed-files:
- - any-glob-to-any-file: '**/*sysv-generator*'
-sysvcompat:
- - changed-files:
- - any-glob-to-any-file: '**/*sysv*'
tests:
- changed-files:
- any-glob-to-any-file: [
diff --git a/NEWS b/NEWS
index 91999c1e23..db1f32f73c 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,20 @@ CHANGES WITH 260 in spe:
Feature Removals and Incompatible Changes:
+ * Support for System V service scripts has been removed. Please make
+ sure to update your software *now* to include a native systemd unit
+ file instead of a legacy System V script.
+
+ The following components have been removed:
+
+ * systemd-rc-local-generator and rc-local.service,
+ * systemd-sysv-generator,
+ * systemd-sysv-install (hook for systemctl enable/disable/is-enabled).
+
+ The corresponding meson options '-Drc-local=', '-Dsysvinit-path=',
+ and '-Dsysvrcnd-path=' are deprecated, and will be dropped in a future
+ release.
+
* Meson options '-Dintegration-tests=' and '-Dcryptolib=' (deprecated
in v258) have been removed.
diff --git a/README b/README
index 718a02d087..f591f65114 100644
--- a/README
+++ b/README
@@ -434,17 +434,6 @@ GLIBC NSS:
gshadow: files systemd
hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns
-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 and TAINT FLAGS:
systemd requires that the /run mount point exists. systemd also
requires that /var/run is a symlink to /run. Taint flag 'var-run-bad'
diff --git a/TODO b/TODO
index f0abb25316..6e4c5393df 100644
--- a/TODO
+++ b/TODO
@@ -2261,7 +2261,7 @@ Features:
being properly synchronous we just keep open the fd and close it
when done. That means clients do not get a successful method reply,
but much rather a disconnect on success.
- - when breaking cycles drop sysv services first, then services from /run, then from /etc, then from /usr
+ - when breaking cycles drop services from /run first, then from /etc, then from /usr
- when a bus name of a service disappears from the bus make sure to queue further activation requests
- maybe introduce CoreScheduling=yes/no to optionally set a PR_SCHED_CORE cookie, so that all
processes in a service's cgroup share the same cookie and are guaranteed not to share SMT cores
@@ -2688,7 +2688,6 @@ Features:
* document:
- document that deps in [Unit] sections ignore Alias= fields in
[Install] units of other units, unless those units are disabled
- - man: clarify that time-sync.target is not only sysv compat but also useful otherwise. Same for similar targets
- document that service reload may be implemented as service reexec
- add a man page containing packaging guidelines and recommending usage of things like Documentation=, PrivateTmp=, PrivateNetwork= and ReadOnlyDirectories=/etc /usr.
- document systemd-journal-flush.service properly
diff --git a/docs/DISTRO_PORTING.md b/docs/DISTRO_PORTING.md
index fc25d91d70..159cdd13b4 100644
--- a/docs/DISTRO_PORTING.md
+++ b/docs/DISTRO_PORTING.md
@@ -13,7 +13,6 @@ You need to make the follow changes to adapt systemd to your distribution:
1. Find the right configure parameters for:
- * `-Drc-local=`
* `-Dloadkeys-path=`
* `-Dsetfont-path=`
* `-Dtty-gid=`
diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md
index 5897ede77c..d5f712e4be 100644
--- a/docs/ENVIRONMENT.md
+++ b/docs/ENVIRONMENT.md
@@ -138,8 +138,6 @@ All tools:
* `$SYSTEMCTL_INSTALL_CLIENT_SIDE=1` — if set, enable or disable unit files on
the client side, instead of asking PID 1 to do this.
-* `$SYSTEMCTL_SKIP_SYSV=1` — if set, do not call SysV compatibility hooks.
-
* `$SYSTEMCTL_SKIP_AUTO_KEXEC=1` — if set, do not automatically kexec instead of
reboot when a new kernel has been loaded.
diff --git a/docs/FAQ.md b/docs/FAQ.md
index 45ba2d0d74..7868ad7bfa 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -81,10 +81,6 @@ Or you can even check /proc/$PID/cgroup directly. Also see [this blog story](htt
A: Unfortunately that would be a racy operation. For an explanation why and how we tried to improve the situation, see [the bugzilla report about this](https://bugzilla.redhat.com/show_bug.cgi?id=615527).
-**Q: I have a native systemd service file and a SysV init script installed which share the same basename, e.g. /usr/lib/systemd/system/foobar.service vs. /etc/init.d/foobar -- which one wins?**
-
-A: If both files are available the native unit file always takes precedence and the SysV init script is ignored, regardless whether either is enabled or disabled. Note that a SysV service that is enabled but overridden by a native service does not have the effect that the native service would be enabled, too. Enabling of native and SysV services is completely independent. Or in other words: you cannot enable a native service by enabling a SysV service by the same name, and if a SysV service is enabled but the respective native service is not, this will not have the effect that the SysV script is executed.
-
**Q: How can I use journalctl to display full (= not truncated) messages even if less is not used?**
A: Use:
diff --git a/docs/NETWORK_ONLINE.md b/docs/NETWORK_ONLINE.md
index d2a757ac51..54c967b041 100644
--- a/docs/NETWORK_ONLINE.md
+++ b/docs/NETWORK_ONLINE.md
@@ -70,16 +70,10 @@ For more details about those targets, see the
[systemd.special(7)](https://www.freedesktop.org/software/systemd/man/systemd.special.html)
man page.
-## Compatibility with SysV init
-
-LSB defines a `$network` dependency for legacy init scripts. Whenever systemd
-encounters a `$network` dependency in LSB headers of init scripts it will
-translate this to `Wants=` and `After=` dependencies on
-`network-online.target`, staying relatively close to traditional LSB behaviour.
-
# Discussion
-The meaning of `$network` is defined [only very
+LSB defines a `$network` dependency for legacy init scripts.
+However, it is defined [only very
unprecisely](http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/facilname.html)
and people tend to have different ideas what it is supposed to mean. Here are a
couple of ideas people came up with so far:
diff --git a/docs/index.md b/docs/index.md
index 3c05c93550..5ab659131e 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -7,7 +7,7 @@ SPDX-License-Identifier: LGPL-2.1-or-later
systemd is a suite of basic building blocks for a Linux system. It provides a system and service manager that runs as PID 1 and starts the rest of the system.
-systemd provides aggressive parallelization capabilities, uses socket and D-Bus activation for starting services, offers on-demand starting of daemons, keeps track of processes using Linux control groups, maintains mount and automount points, and implements an elaborate transactional dependency-based service control logic. systemd supports SysV and LSB init scripts and works as a replacement for sysvinit.
+systemd provides aggressive parallelization capabilities, uses socket and D-Bus activation for starting services, offers on-demand starting of daemons, keeps track of processes using Linux control groups, maintains mount and automount points, and implements an elaborate transactional dependency-based service control logic.
Other parts include a logging daemon, utilities to control basic system configuration like the hostname, date, locale, maintain a list of logged-in users and running containers and virtual machines, system accounts, runtime directories and settings, and daemons to manage simple network configuration, network time synchronization, log forwarding, and name resolution.
diff --git a/man/custom-entities.ent.in b/man/custom-entities.ent.in
index 1f3ecefe61..6c2738d908 100644
--- a/man/custom-entities.ent.in
+++ b/man/custom-entities.ent.in
@@ -12,7 +12,6 @@
-
diff --git a/man/rules/meson.build b/man/rules/meson.build
index 4868a22709..d062187d6b 100644
--- a/man/rules/meson.build
+++ b/man/rules/meson.build
@@ -1130,10 +1130,6 @@ manpages = [
'8',
['systemd-random-seed'],
'ENABLE_RANDOMSEED'],
- ['systemd-rc-local-generator',
- '8',
- ['rc-local.service'],
- 'HAVE_SYSV_RC_LOCAL'],
['systemd-remount-fs.service', '8', ['systemd-remount-fs'], ''],
['systemd-repart', '8', ['systemd-repart.service'], 'ENABLE_REPART'],
['systemd-resolved.service', '8', ['systemd-resolved'], 'ENABLE_RESOLVE'],
diff --git a/man/systemd-rc-local-generator.xml b/man/systemd-rc-local-generator.xml
deleted file mode 100644
index a2ea8a9d14..0000000000
--- a/man/systemd-rc-local-generator.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-%entities;
-]>
-
-
-
-
- systemd-rc-local-generator
- systemd
-
-
-
- systemd-rc-local-generator
- 8
-
-
-
- systemd-rc-local-generator
- rc-local.service
- Compatibility generator and service to start &SYSTEM_SYSVRCLOCAL_PATH; during boot
-
-
-
- /usr/lib/systemd/system-generators/systemd-rc-local-generator
- rc-local.service
-
-
-
- Description
-
- systemd-rc-local-generator is a generator that checks whether
- &SYSTEM_SYSVRCLOCAL_PATH; exists and is executable, and if it is, pulls the
- rc-local.service unit into the boot process. This unit is responsible for running
- this script during late boot. The script is run after network.target, but in
- parallel with most other regular system services.
-
- Note that rc-local.service runs with slightly different semantics than the
- original System V version, which was executed "last" in the boot process, which is a concept that does
- not translate to systemd.
-
- Also note that rc-local.service is ordered after
- network.target, which does not mean that the network is functional, see
- systemd.special7.
- If the script requires a configured network connection, it may be desirable to pull in and order it after
- network-online.target with a drop-in:
-
- # /etc/systemd/system/rc-local.service.d/network.conf
-[Unit]
-Wants=network-online.target
-After=network-online.target
-
-
- Support for &SYSTEM_SYSVRCLOCAL_PATH; is provided for compatibility with specific
- System V systems only. However, it is strongly recommended to avoid using this script today, and instead
- provide proper unit files with appropriate dependencies for any scripts to run during the boot process.
- Note that the path to the script is set at compile time and varies between distributions.
-
- systemd-rc-local-generator implements
- systemd.generator7.
-
-
-
- Notes
-
- On systems with SELinux, when creating the file, make sure to set the appropriate context, e.g.
- with "sudo restorecon -v &SYSTEM_SYSVRCLOCAL_PATH;".
-
-
-
-
- See Also
-
- systemd1
- systemctl1
-
-
-
diff --git a/man/systemd.generator.xml b/man/systemd.generator.xml
index 47bb970a55..f39c073378 100644
--- a/man/systemd.generator.xml
+++ b/man/systemd.generator.xml
@@ -405,7 +405,6 @@ find $dir
systemd-getty-generator8
systemd-gpt-auto-generator8
systemd-hibernate-resume-generator8
- systemd-rc-local-generator8
systemd-system-update-generator8
systemd-xdg-autostart-generator8
systemd.unit5
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index eb370f67bc..447ec57bfd 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -583,10 +583,6 @@
functionality to other hosts (as opposed to consume functionality of other
hosts) generally do not need to pull this in.
- systemd automatically adds dependencies of type Wants= and
- After= for this target unit to all SysV init script service units
- with an LSB header referring to the $network facility.
-
Note that this unit is only useful during the original system start-up
logic. After the system has completed booting up, it will not track the online state of
the system anymore. Due to this it cannot be used as a network connection monitor
@@ -679,11 +675,6 @@
Similar to local-fs.target, but
for remote mount points.
-
- systemd automatically adds dependencies of type
- After= for this target unit to all SysV
- init script service units with an LSB header referring to
- the $remote_fs facility.
@@ -1185,9 +1176,7 @@ WantedBy=sleep.target
service lookups. Note that this is independent of UNIX user/group name lookups for which
nss-user-lookup.target should be used. All services for which the
availability of full host/network name resolution is essential should be ordered after
- this target, but not pull it in. systemd automatically adds dependencies of type
- After= for this target unit to all SysV init script service units
- with an LSB header referring to the $named facility.
+ this target, but not pull it in.
@@ -1224,11 +1213,7 @@ WantedBy=sleep.target
rpcbind.target
The portmapper/rpcbind pulls in this target and orders
- itself before it, to indicate its availability. systemd
- automatically adds dependencies of type
- After= for this target unit to all SysV
- init script service units with an LSB header referring to
- the $portmap facility.
+ itself before it, to indicate its availability.
@@ -1289,9 +1274,7 @@ WantedBy=sleep.target
unit, but not pull it in.
The service manager automatically adds dependencies of type After= for
- this target unit to all SysV init script service units with an LSB header referring to the
- $time facility, as well to all timer units with at least one
- OnCalendar= directive.
+ this target unit to all timer units with at least one OnCalendar= directive.
This target provides stricter clock accuracy guarantees than
time-set.target (see above), but likely requires
diff --git a/meson.build b/meson.build
index b657d4fae0..da7b01f0a7 100644
--- a/meson.build
+++ b/meson.build
@@ -90,8 +90,6 @@ conf.set10('HAVE_SPLIT_BIN', split_bin,
have_standalone_binaries = get_option('standalone-binaries')
-sysvrclocal_path = get_option('rc-local')
-conf.set10('HAVE_SYSV_RC_LOCAL', sysvrclocal_path != '')
conf.set10('CREATE_LOG_DIRS', get_option('create-log-dirs'))
if get_option('hibernate') and not get_option('initrd')
@@ -299,7 +297,6 @@ conf.set_quoted('SYSTEM_GENERATOR_DIR', systemgeneratordir
conf.set_quoted('SYSTEM_PRESET_DIR', systempresetdir)
conf.set_quoted('SYSTEM_SHUTDOWN_PATH', systemshutdowndir)
conf.set_quoted('SYSTEM_SLEEP_PATH', systemsleepdir)
-conf.set_quoted('SYSTEM_SYSVRCLOCAL_PATH', sysvrclocal_path)
conf.set_quoted('SYSUSERS_DIR', sysusersdir)
conf.set_quoted('TMPFILES_DIR', tmpfilesdir)
conf.set_quoted('USER_TMPFILES_DIR', usertmpfilesdir)
@@ -2401,7 +2398,6 @@ subdir('src/pstore')
subdir('src/ptyfwd')
subdir('src/quotacheck')
subdir('src/random-seed')
-subdir('src/rc-local-generator')
subdir('src/remount-fs')
subdir('src/repart')
subdir('src/reply-password')
@@ -3022,7 +3018,6 @@ summary({
'sysconf directory' : sysconfdir,
'include directory' : includedir,
'lib directory' : libdir,
- 'SysV rc.local script' : sysvrclocal_path,
'PAM modules directory' : pamlibdir,
'PAM configuration directory' : pamconfdir,
'ssh server configuration directory' : sshdconfdir,
@@ -3188,7 +3183,6 @@ foreach tuple : [
['man pages', want_man],
['html pages', want_html],
['man page indices', want_man and have_lxml],
- ['SysV compat'],
['compat-mutable-uid-boundaries'],
['utmp'],
['ldconfig'],
diff --git a/meson_options.txt b/meson_options.txt
index c555b9ebdc..21d3e79028 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -45,7 +45,7 @@ option('sysvinit-path', type : 'string', value : '/etc/init.d', deprecated : tru
description : 'This option is deprecated and will be removed in a future release')
option('sysvrcnd-path', type : 'string', value : '/etc/rc.d', deprecated : true,
description : 'This option is deprecated and will be removed in a future release')
-option('rc-local', type : 'string', value : '/etc/rc.local',
+option('rc-local', type : 'string', value : '/etc/rc.local', deprecated : true,
description : 'path to SysV rc.local script')
option('initrd', type : 'boolean',
description : 'install services for use when running systemd in initrd')
diff --git a/mkosi/mkosi.conf.d/opensuse/mkosi.conf.d/debug.conf b/mkosi/mkosi.conf.d/opensuse/mkosi.conf.d/debug.conf
index 4614ea06a2..860319a610 100644
--- a/mkosi/mkosi.conf.d/opensuse/mkosi.conf.d/debug.conf
+++ b/mkosi/mkosi.conf.d/opensuse/mkosi.conf.d/debug.conf
@@ -16,6 +16,5 @@ VolatilePackages=
systemd-networkd-debuginfo
systemd-portable-debuginfo
systemd-resolved-debuginfo
- systemd-sysvcompat-debuginfo
systemd-testsuite-debuginfo
udev-debuginfo
diff --git a/mkosi/mkosi.images/build/mkosi.conf.d/opensuse/mkosi.build.chroot b/mkosi/mkosi.images/build/mkosi.conf.d/opensuse/mkosi.build.chroot
index 6adec4ce72..e14c8884a0 100755
--- a/mkosi/mkosi.images/build/mkosi.conf.d/opensuse/mkosi.build.chroot
+++ b/mkosi/mkosi.images/build/mkosi.conf.d/opensuse/mkosi.build.chroot
@@ -27,6 +27,7 @@ while read -r filelist; do
-e '/(initctl|runlevel|telinit)/ d' \
-e 's/systemd-quotacheck.service.8/systemd-quotacheck@.service.8/' \
-e '/systemd-sysv-generator/d' \
+ -e '/rc-local/d' \
"$filelist" >"/tmp/$(basename "$filelist")"
mount --bind "/tmp/$(basename "$filelist")" "$filelist"
done < <(find "pkg/$PKG_SUBDIR${GIT_SUBDIR:+/$GIT_SUBDIR}" -name "files.*")
diff --git a/mkosi/mkosi.pkgenv/mkosi.conf.d/debian-ubuntu.conf b/mkosi/mkosi.pkgenv/mkosi.conf.d/debian-ubuntu.conf
index 310b862ac6..f435febd4b 100644
--- a/mkosi/mkosi.pkgenv/mkosi.conf.d/debian-ubuntu.conf
+++ b/mkosi/mkosi.pkgenv/mkosi.conf.d/debian-ubuntu.conf
@@ -9,5 +9,5 @@ Environment=
GIT_URL=https://salsa.debian.org/systemd-team/systemd.git
GIT_SUBDIR=debian
GIT_BRANCH=debian/master
- GIT_COMMIT=f05328feafba2156f31e17e0e2c144cfa7c66e72
+ GIT_COMMIT=93a222266c23ff73720f4de009a027d3556baee4
PKG_SUBDIR=debian
diff --git a/src/rc-local-generator/meson.build b/src/rc-local-generator/meson.build
deleted file mode 100644
index b3a73117f8..0000000000
--- a/src/rc-local-generator/meson.build
+++ /dev/null
@@ -1,11 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-
-executables += [
- generator_template + {
- 'name' : 'systemd-rc-local-generator',
- 'sources' : files('rc-local-generator.c'),
- 'conditions' : [
- 'HAVE_SYSV_RC_LOCAL',
- ],
- },
-]
diff --git a/src/rc-local-generator/rc-local-generator.c b/src/rc-local-generator/rc-local-generator.c
deleted file mode 100644
index 8b1b75f569..0000000000
--- a/src/rc-local-generator/rc-local-generator.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include
-
-#include "generator.h"
-#include "initrd-util.h"
-#include "log.h"
-#include "mkdir-label.h"
-#include "string-util.h"
-
-static const char *arg_dest = NULL;
-
-/* So you are reading this, and might wonder: why is this implemented as a generator rather than as a plain, statically
- * enabled service that carries appropriate ConditionFileIsExecutable= lines? The answer is this: conditions bypass
- * execution of a service's binary, but they have no influence on unit dependencies. Thus, a service that is
- * conditioned out will still act as synchronization point in the dependency tree, and we'd rather not have that for
- * these two legacy scripts. */
-
-static int add_symlink(const char *service, const char *where) {
- const char *from, *to;
-
- assert(service);
- assert(where);
-
- from = strjoina(SYSTEM_DATA_UNIT_DIR "/", service);
- to = strjoina(arg_dest, "/", where, ".wants/", service);
-
- (void) mkdir_parents_label(to, 0755);
-
- if (symlink(from, to) < 0) {
- if (errno == EEXIST)
- return 0;
-
- return log_error_errno(errno, "Failed to create symlink %s: %m", to);
- }
-
- return 1;
-}
-
-static int check_executable(const char *path) {
- assert(path);
-
- if (access(path, X_OK) < 0) {
- if (errno == ENOENT)
- return log_debug_errno(errno, "%s does not exist, skipping.", path);
- if (errno == EACCES)
- return log_info_errno(errno, "%s is not marked executable, skipping.", path);
-
- return log_warning_errno(errno, "Couldn't determine if %s exists and is executable, skipping: %m", path);
- }
-
- return 0;
-}
-
-static int run(const char *dest, const char *dest_early, const char *dest_late) {
- int r = 0, k = 0;
-
- assert_se(arg_dest = dest);
-
- if (in_initrd()) {
- log_debug("Skipping generator, running in the initrd.");
- return EXIT_SUCCESS;
- }
-
- if (check_executable(SYSTEM_SYSVRCLOCAL_PATH) >= 0) {
- log_debug("Automatically adding rc-local.service.");
-
- r = add_symlink("rc-local.service", "multi-user.target");
- }
-
- return r < 0 ? r : k;
-}
-
-DEFINE_MAIN_GENERATOR_FUNCTION(run);
diff --git a/test/units/TEST-23-UNIT-FILE.verify-unit-files.sh b/test/units/TEST-23-UNIT-FILE.verify-unit-files.sh
index 200e7582bd..b94e486b7a 100755
--- a/test/units/TEST-23-UNIT-FILE.verify-unit-files.sh
+++ b/test/units/TEST-23-UNIT-FILE.verify-unit-files.sh
@@ -29,8 +29,7 @@ fi
for unit_file in "${UNIT_FILES[@]}"; do
# Skip the check for a couple of units, namely:
# - syslog.socket: the corresponding syslog.service might not be installed
- # - rc-local.service: compat API, /etc/rc.d/rc.local most likely won't be present
- if [[ "$unit_file" =~ /(syslog.socket|rc-local.service)$ ]]; then
+ if [[ "$unit_file" =~ /syslog.socket$ ]]; then
continue
fi
diff --git a/units/console-getty.service.in b/units/console-getty.service.in
index aecb8f0948..d28fddbc03 100644
--- a/units/console-getty.service.in
+++ b/units/console-getty.service.in
@@ -11,9 +11,6 @@
Description=Console Getty
Documentation=man:agetty(8) man:systemd-getty-generator(8)
After=systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target
-{% if HAVE_SYSV_RC_LOCAL %}
-After=rc-local.service
-{% endif %}
Before=getty.target
# OCI containers may be run without a console
diff --git a/units/container-getty@.service.in b/units/container-getty@.service.in
index 6e0e59d396..839a76c73f 100644
--- a/units/container-getty@.service.in
+++ b/units/container-getty@.service.in
@@ -12,9 +12,6 @@ Description=Container Getty on /dev/pts/%I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=man:machinectl(1)
After=systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target
-{% if HAVE_SYSV_RC_LOCAL %}
-After=rc-local.service
-{% endif %}
Before=getty.target
IgnoreOnIsolate=yes
ConditionPathExists=/dev/pts/%I
diff --git a/units/getty@.service.in b/units/getty@.service.in
index e9ca6401ee..19b95ce56d 100644
--- a/units/getty@.service.in
+++ b/units/getty@.service.in
@@ -12,9 +12,6 @@ Description=Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=https://0pointer.de/blog/projects/serial-console.html
After=systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target
-{% if HAVE_SYSV_RC_LOCAL %}
-After=rc-local.service
-{% endif %}
# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
diff --git a/units/meson.build b/units/meson.build
index 25e98ae90e..f2c5d22055 100644
--- a/units/meson.build
+++ b/units/meson.build
@@ -174,10 +174,6 @@ units = [
'file' : 'quotaon-root.service.in',
'conditions' : ['ENABLE_QUOTACHECK'],
},
- {
- 'file' : 'rc-local.service.in',
- 'conditions' : ['HAVE_SYSV_RC_LOCAL'],
- },
{
'file' : 'reboot.target',
'symlinks' : ['ctrl-alt-del.target'],
diff --git a/units/rc-local.service.in b/units/rc-local.service.in
deleted file mode 100644
index b135f3894d..0000000000
--- a/units/rc-local.service.in
+++ /dev/null
@@ -1,23 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-#
-# This file is part of systemd.
-#
-# systemd is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
-
-# This unit gets pulled automatically into multi-user.target by
-# systemd-rc-local-generator if {{SYSTEM_SYSVRCLOCAL_PATH}} is executable.
-[Unit]
-Description={{SYSTEM_SYSVRCLOCAL_PATH}} Compatibility
-Documentation=man:systemd-rc-local-generator(8)
-ConditionFileIsExecutable={{SYSTEM_SYSVRCLOCAL_PATH}}
-After=network.target
-
-[Service]
-Type=forking
-ExecStart={{SYSTEM_SYSVRCLOCAL_PATH}} start
-TimeoutSec=infinity
-RemainAfterExit=yes
-GuessMainPID=no
diff --git a/units/serial-getty@.service.in b/units/serial-getty@.service.in
index c0708f1777..01c6b0abb2 100644
--- a/units/serial-getty@.service.in
+++ b/units/serial-getty@.service.in
@@ -13,9 +13,6 @@ Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=https://0pointer.de/blog/projects/serial-console.html
BindsTo=dev-%i.device
After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target
-{% if HAVE_SYSV_RC_LOCAL %}
-After=rc-local.service
-{% endif %}
# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though