]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
units: restore runlevel[0-6].target aliases
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 28 Jan 2026 15:37:18 +0000 (16:37 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 1 Feb 2026 08:40:10 +0000 (09:40 +0100)
This partially reverts commit e58ba80a40fb6e96543d56774a5bc5aa9cdadbf3. Those
aliases were removed as part of the removal of sysvinit compat, but the removal
was immediately reported as a regression by users. In particular, users can
have one of those set as the default target, or use those names in Wants= or
Requires= dependencies. At least in Fedora, the removal was immediately
reverted.

When looking at our "portability and stability promise", I noticed that those
units are explicitly listed in the promise. Let's restore them upstream. They
are conditionalized under a new -Dcompat-sysv-interfaces=bool option, so that
downstreams like Arch that wasnt to strictly avoid legacy interfaces can easily
disable them. They are dropped from the docs, like we do for all deprecated
interfaces.

docs/PORTABILITY_AND_STABILITY.md
meson.build
meson_options.txt
units/meson.build

index 7de60066e45e3dcbf1f0d6cd154b92cc4086d69a..da545f7c0156b488cbbff2f1a4bc4c0bdba5729f 100644 (file)
@@ -71,8 +71,7 @@ Note that the promise of stability applies only after an interface has been part
   `emergency.target`,
   `poweroff.target`,
   `reboot.target`,
-  `halt.target`,
-  `runlevel[1-5].target`.
+  `halt.target`.
 
 We try to always preserve backward compatibility in programmatic interfaces
 and intentional breakage is never introduced.
index e091631ca82da018475f647e19b971ad6fb9b2ac..67c495155d1dd787a01dc33e6daa2f868f06c9ab 100644 (file)
@@ -1597,6 +1597,7 @@ foreach tuple : [
                 ['backlight'],
                 ['binfmt'],
                 ['compat-mutable-uid-boundaries'],
+                ['compat-sysv-interfaces'],
                 ['coredump'],
                 ['efi'],
                 ['environment-d'],
@@ -3185,6 +3186,7 @@ foreach tuple : [
         ['html pages',             want_html],
         ['man page indices',       want_man and have_lxml],
         ['compat-mutable-uid-boundaries'],
+        ['compat-sysv-interfaces'],
         ['utmp'],
         ['ldconfig'],
         ['adm group',              get_option('adm-group')],
index 93c264488c03dce5d89c8d21563c11c0678dcebc..4d13d2866d29d704ec8cfa7d56a8a40ca2fe08af 100644 (file)
@@ -52,6 +52,8 @@ option('initrd', type : 'boolean',
        description : 'install services for use when running systemd in initrd')
 option('compat-mutable-uid-boundaries', type : 'boolean', value : false,
        description : 'look at uid boundaries in /etc/login.defs for compatibility')
+option('compat-sysv-interfaces', type : 'boolean', value : true,
+       description : 'keep legacy SysV interfaces for compatibility')
 
 option('quotaon-path', type : 'string', description : 'path to quotaon')
 option('quotacheck-path', type : 'string', description : 'path to quotacheck')
index d64edec8844c6b6ea2794531fc46e29a3d2ecac5..113a935c90b01c9aaab7fb0f7e4cf8913cb8ca74 100644 (file)
@@ -1,5 +1,7 @@
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
+runlevels = conf.get('ENABLE_COMPAT_SYSV_INTERFACES') == 1
+
 units = [
         { 'file' : 'basic.target' },
         { 'file' : 'blockdev@.target' },
@@ -46,7 +48,7 @@ units = [
         { 'file' : 'getty@.service.in' },
         {
           'file' : 'graphical.target',
-          'symlinks' : ['default.target'],
+          'symlinks' : ['default.target'] + (runlevels ? ['runlevel5.target'] : []),
         },
         { 'file' : 'halt.target' },
         {
@@ -139,7 +141,10 @@ units = [
           'conditions' : ['ENABLE_MACHINED'],
         },
         { 'file' : 'modprobe@.service' },
-        { 'file' : 'multi-user.target' },
+        {
+          'file' : 'multi-user.target',
+          'symlinks' : runlevels ? ['runlevel2.target', 'runlevel3.target', 'runlevel4.target'] : [],
+        },
         {
           'file' : 'systemd-mute-console.socket',
           'symlinks' : ['sockets.target.wants/']
@@ -152,7 +157,10 @@ units = [
         { 'file' : 'nss-lookup.target' },
         { 'file' : 'nss-user-lookup.target' },
         { 'file' : 'paths.target' },
-        { 'file' : 'poweroff.target' },
+        {
+          'file' : 'poweroff.target',
+          'symlinks' : runlevels ? ['runlevel0.target'] : [],
+        },
         { 'file' : 'printer.target' },
         {
           'file' : 'proc-sys-fs-binfmt_misc.automount',
@@ -173,7 +181,7 @@ units = [
         },
         {
           'file' : 'reboot.target',
-          'symlinks' : ['ctrl-alt-del.target'],
+          'symlinks' : ['ctrl-alt-del.target'] + (runlevels ? ['runlevel6.target'] : []),
         },
         {
           'file' : 'remote-cryptsetup.target',
@@ -193,7 +201,10 @@ units = [
           'symlinks' : ['initrd-root-device.target.wants/'],
         },
         { 'file' : 'rescue.service.in' },
-        { 'file' : 'rescue.target' },
+        {
+          'file' : 'rescue.target',
+          'symlinks' : runlevels ? ['runlevel1.target'] : [],
+        },
         { 'file' : 'rpcbind.target' },
         { 'file' : 'serial-getty@.service.in' },
         { 'file' : 'shutdown.target' },