core/swap: /sbin -> /usr/sbin

I noticed in our NixOS packaging that we were working around the fact
that core/swap.c looks for swapon and swapoff in /sbin

Lets make it configurable just like all the other util-linux binaries
through meson and make it default to /usr/sbin/{swapon,swapoff}

This way mounts work on a systemd without the /sbin -> /usr/sbin
compatibility symlink.  (And as a side-effect has NixOS be able
to have it in /nix/store too like the other util-linux tools).
This commit is contained in:
Arian van Putten
2025-08-24 13:24:26 +02:00
parent 46a688c559
commit ef8517f024
3 changed files with 6 additions and 2 deletions

View File

@@ -634,6 +634,8 @@ progs = [['quotaon', '/usr/sbin/quotaon' ],
['kmod', '/usr/bin/kmod' ],
['kexec', '/usr/sbin/kexec' ],
['sulogin', '/usr/sbin/sulogin' ],
['swapon', '/usr/sbin/swapon' ],
['swapoff', '/usr/sbin/swapoff' ],
['mount', '/usr/bin/mount', 'MOUNT_PATH'],
['umount', '/usr/bin/umount', 'UMOUNT_PATH'],
['loadkeys', '/usr/bin/loadkeys', 'KBD_LOADKEYS'],

View File

@@ -57,6 +57,8 @@ option('quotacheck-path', type : 'string', description : 'path to quotacheck')
option('kmod-path', type : 'string', description : 'path to kmod')
option('kexec-path', type : 'string', description : 'path to kexec')
option('sulogin-path', type : 'string', description : 'path to sulogin')
option('swapon-path', type : 'string', description : 'path to swapon')
option('swapoff-path', type : 'string', description : 'path to swapoff')
option('mount-path', type : 'string', description : 'path to mount')
option('umount-path', type : 'string', description : 'path to umount')
option('loadkeys-path', type : 'string', description : 'path to loadkeys')

View File

@@ -781,7 +781,7 @@ static void swap_enter_activating(Swap *s) {
}
}
r = exec_command_set(s->control_command, "/sbin/swapon", "--fixpgsz", NULL);
r = exec_command_set(s->control_command, SWAPON, "--fixpgsz", NULL);
if (r < 0) {
log_unit_warning_errno(UNIT(s), r, "Failed to initialize swapon command line: %m");
goto fail;
@@ -826,7 +826,7 @@ static void swap_enter_deactivating(Swap *s) {
s->control_command = s->exec_command + SWAP_EXEC_DEACTIVATE;
r = exec_command_set(s->control_command,
"/sbin/swapoff",
SWAPOFF,
s->what,
NULL);
if (r < 0) {