From 8e7fc8880061fc17b9cc3dfd8dd19c4a2036c8fa Mon Sep 17 00:00:00 2001 From: Christopher Byrne Date: Mon, 13 Jul 2026 00:58:12 -0500 Subject: [PATCH 1/4] build: Non-automagic dracut support Signed-off-by: Christopher Byrne --- meson_options.txt | 1 + src/luks/dracut/clevis-pin-null/meson.build | 2 +- src/luks/dracut/clevis-pin-pkcs11/meson.build | 2 +- src/luks/dracut/clevis-pin-sss/meson.build | 2 +- src/luks/dracut/clevis-pin-tang/meson.build | 2 +- src/luks/dracut/clevis-pin-tpm1/meson.build | 2 +- src/luks/dracut/clevis-pin-tpm2/meson.build | 2 +- src/luks/dracut/clevis/meson.build | 2 +- src/luks/dracut/meson.build | 19 +++++++++++-------- src/pins/file/meson.build | 2 +- src/pins/template/meson.build | 2 +- 11 files changed, 21 insertions(+), 17 deletions(-) diff --git a/meson_options.txt b/meson_options.txt index 0c22fd65..2fa64c26 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,3 +1,4 @@ option('user', type: 'string', value: 'clevis', description: 'Unprivileged user for secure clevis operations') option('group', type: 'string', value: 'clevis', description: 'Unprivileged group for secure clevis operations') option('tpm1', type: 'feature', value: 'auto', description: 'Enable TPM 1.2 pin support') +option('dracut', type: 'feature', value: 'auto', description: 'Enable dracut support for clevis') diff --git a/src/luks/dracut/clevis-pin-null/meson.build b/src/luks/dracut/clevis-pin-null/meson.build index 57278f72..00a49a01 100644 --- a/src/luks/dracut/clevis-pin-null/meson.build +++ b/src/luks/dracut/clevis-pin-null/meson.build @@ -9,6 +9,6 @@ if dracut.found() install_dir: dracutdir, configuration: data, ) -else +elif get_option('dracut').auto() warning('Will not install dracut module clevis-pin-null due to missing dependencies!') endif diff --git a/src/luks/dracut/clevis-pin-pkcs11/meson.build b/src/luks/dracut/clevis-pin-pkcs11/meson.build index 689222be..911466e0 100644 --- a/src/luks/dracut/clevis-pin-pkcs11/meson.build +++ b/src/luks/dracut/clevis-pin-pkcs11/meson.build @@ -18,6 +18,6 @@ if dracut.found() ) install_data('clevis-pkcs11-prehook.sh', install_dir: dracutdir) -else +elif get_option('dracut').auto() warning('Will not install dracut module clevis-pin-pkcs11 due to missing dependencies!') endif diff --git a/src/luks/dracut/clevis-pin-sss/meson.build b/src/luks/dracut/clevis-pin-sss/meson.build index c652a9ed..6338af31 100644 --- a/src/luks/dracut/clevis-pin-sss/meson.build +++ b/src/luks/dracut/clevis-pin-sss/meson.build @@ -9,6 +9,6 @@ if dracut.found() install_dir: dracutdir, configuration: data, ) -else +elif get_option('dracut').auto() warning('Will not install dracut module clevis-pin-sss due to missing dependencies!') endif diff --git a/src/luks/dracut/clevis-pin-tang/meson.build b/src/luks/dracut/clevis-pin-tang/meson.build index 8e1cfcab..b896748d 100644 --- a/src/luks/dracut/clevis-pin-tang/meson.build +++ b/src/luks/dracut/clevis-pin-tang/meson.build @@ -9,6 +9,6 @@ if dracut.found() install_dir: dracutdir, configuration: data, ) -else +elif get_option('dracut').auto() warning('Will not install dracut module clevis-pin-tang due to missing dependencies!') endif diff --git a/src/luks/dracut/clevis-pin-tpm1/meson.build b/src/luks/dracut/clevis-pin-tpm1/meson.build index 8e5a6758..dc4bc6f5 100644 --- a/src/luks/dracut/clevis-pin-tpm1/meson.build +++ b/src/luks/dracut/clevis-pin-tpm1/meson.build @@ -9,6 +9,6 @@ if dracut.found() install_dir: dracutdir, configuration: data, ) -else +elif get_option('dracut').auto() warning('Will not install dracut module clevis-pin-tpm1 due to missing dependencies!') endif diff --git a/src/luks/dracut/clevis-pin-tpm2/meson.build b/src/luks/dracut/clevis-pin-tpm2/meson.build index 7863f8ba..fcff319e 100644 --- a/src/luks/dracut/clevis-pin-tpm2/meson.build +++ b/src/luks/dracut/clevis-pin-tpm2/meson.build @@ -9,6 +9,6 @@ if dracut.found() install_dir: dracutdir, configuration: data, ) -else +elif get_option('dracut').auto() warning('Will not install dracut module clevis-pin-tpm2 due to missing dependencies!') endif diff --git a/src/luks/dracut/clevis/meson.build b/src/luks/dracut/clevis/meson.build index e6230f33..a4b18d71 100644 --- a/src/luks/dracut/clevis/meson.build +++ b/src/luks/dracut/clevis/meson.build @@ -38,6 +38,6 @@ if dracut.found() install_data('clevis-cleanup-hook.sh', install_dir: dracutdir) install_data('clevis-password-unlocker-hook.sh', install_dir: dracutdir) install_data('clevis-online-hook.sh', install_dir: dracutdir) -else +elif get_option('dracut').auto() warning('Will not install dracut module due to missing dependencies!') endif diff --git a/src/luks/dracut/meson.build b/src/luks/dracut/meson.build index d78af7d7..fb618723 100644 --- a/src/luks/dracut/meson.build +++ b/src/luks/dracut/meson.build @@ -1,9 +1,12 @@ -subdir('clevis') -subdir('clevis-pin-tang') -if not get_option('tpm1').disabled() - subdir('clevis-pin-tpm1') +dracut = dependency('dracut', required: get_option('dracut')) +if dracut.found() + subdir('clevis') + subdir('clevis-pin-tang') + if not get_option('tpm1').disabled() + subdir('clevis-pin-tpm1') + endif + subdir('clevis-pin-tpm2') + subdir('clevis-pin-sss') + subdir('clevis-pin-null') + subdir('clevis-pin-pkcs11') endif -subdir('clevis-pin-tpm2') -subdir('clevis-pin-sss') -subdir('clevis-pin-null') -subdir('clevis-pin-pkcs11') diff --git a/src/pins/file/meson.build b/src/pins/file/meson.build index dbd9a56f..0e741db6 100644 --- a/src/pins/file/meson.build +++ b/src/pins/file/meson.build @@ -25,7 +25,7 @@ if dracut.found() install_dir: dracutdir, configuration: data, ) -else +elif get_option('dracut').auto() warning('Will not install dracut module clevis-pin-file due to missing dependencies!') endif diff --git a/src/pins/template/meson.build b/src/pins/template/meson.build index e307526d..ebb565f8 100644 --- a/src/pins/template/meson.build +++ b/src/pins/template/meson.build @@ -29,7 +29,7 @@ if curl.found() #%# Run the test. test('pin-@pin@', find_program('./pin-@pin@'), env: env) -else +elif get_option('dracut').auto() warning('Will not install @pin@ pin due to missing dependencies!') endif From 056044b1bf344a700b5ee3c363aa5997c86ecf68 Mon Sep 17 00:00:00 2001 From: Christopher Byrne Date: Mon, 13 Jul 2026 00:58:12 -0500 Subject: [PATCH 2/4] build: Non-automagic udisks2 support Signed-off-by: Christopher Byrne --- meson_options.txt | 1 + src/luks/udisks2/meson.build | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/meson_options.txt b/meson_options.txt index 2fa64c26..6adb18ee 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -2,3 +2,4 @@ option('user', type: 'string', value: 'clevis', description: 'Unprivileged user option('group', type: 'string', value: 'clevis', description: 'Unprivileged group for secure clevis operations') option('tpm1', type: 'feature', value: 'auto', description: 'Enable TPM 1.2 pin support') option('dracut', type: 'feature', value: 'auto', description: 'Enable dracut support for clevis') +option('udisks', type: 'feature', value: 'auto', description: 'Enable udisks2 support for clevis') diff --git a/src/luks/udisks2/meson.build b/src/luks/udisks2/meson.build index 866055b7..8bf4a2d2 100644 --- a/src/luks/udisks2/meson.build +++ b/src/luks/udisks2/meson.build @@ -1,6 +1,6 @@ -audit = dependency('audit', version: '>=2.7.8', required: false) -udisks2 = dependency('udisks2', required: false) -gio = dependency('gio-2.0', required: false) +udisks2 = dependency('udisks2', required: get_option('udisks')) +audit = dependency('audit', version: '>=2.7.8', required: get_option('udisks')) +gio = dependency('gio-2.0', required: get_option('udisks')) if udisks2.found() and audit.found() and gio.found() autostartdir = join_paths(sysconfdir, 'xdg', 'autostart') @@ -18,7 +18,7 @@ if udisks2.found() and audit.found() and gio.found() install_dir: libexecdir, install: true, ) -else +elif get_option('udisks').auto() warning('Will not build udisks2 support due to missing dependencies!') endif From a76c340f6b346d54c0ba2ba92bfa61e1ca9f299d Mon Sep 17 00:00:00 2001 From: Christopher Byrne Date: Mon, 13 Jul 2026 15:55:50 -0500 Subject: [PATCH 3/4] build: Don't require bash-completions to install completions Signed-off-by: Christopher Byrne --- meson_options.txt | 1 + src/bash/meson.build | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/meson_options.txt b/meson_options.txt index 6adb18ee..5fc7c5d2 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -3,3 +3,4 @@ option('group', type: 'string', value: 'clevis', description: 'Unprivileged grou option('tpm1', type: 'feature', value: 'auto', description: 'Enable TPM 1.2 pin support') option('dracut', type: 'feature', value: 'auto', description: 'Enable dracut support for clevis') option('udisks', type: 'feature', value: 'auto', description: 'Enable udisks2 support for clevis') +option('bashcompdir', type: 'string', value: '', description: 'Directory for bash completion files') diff --git a/src/bash/meson.build b/src/bash/meson.build index 89ba7467..6262e6a9 100644 --- a/src/bash/meson.build +++ b/src/bash/meson.build @@ -1,7 +1,11 @@ bashcomp = dependency('bash-completion', required: false) -if bashcomp.found() - bashcompdir = bashcomp.get_pkgconfig_variable('completionsdir') +if get_option('bashcompdir') != '' or bashcomp.found() + if get_option('bashcompdir') != '' + bashcompdir = get_option('bashcompdir') + else + bashcompdir = bashcomp.get_variable(pkgconfig: 'completionsdir') + endif install_data('clevis', install_dir: bashcompdir) else warning('Will not install bash completion due to missing dependencies!') From 8189bb5afaeb9b0a196ffce99cd6058126ab35b7 Mon Sep 17 00:00:00 2001 From: Christopher Byrne Date: Sun, 19 Jul 2026 17:56:07 -0500 Subject: [PATCH 4/4] build: Non-automagic initramfs-tools support Signed-off-by: Christopher Byrne --- meson_options.txt | 1 + src/initramfs-tools/meson.build | 4 ++-- src/pins/file/meson.build | 2 +- src/pins/template/meson.build | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/meson_options.txt b/meson_options.txt index 5fc7c5d2..36cc9d9d 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -4,3 +4,4 @@ option('tpm1', type: 'feature', value: 'auto', description: 'Enable TPM 1.2 pin option('dracut', type: 'feature', value: 'auto', description: 'Enable dracut support for clevis') option('udisks', type: 'feature', value: 'auto', description: 'Enable udisks2 support for clevis') option('bashcompdir', type: 'string', value: '', description: 'Directory for bash completion files') +option('initramfs_tools', type: 'feature', value: 'auto', description: 'Enable initramfs-tools support in clevis') diff --git a/src/initramfs-tools/meson.build b/src/initramfs-tools/meson.build index a4661c90..fd5408e5 100644 --- a/src/initramfs-tools/meson.build +++ b/src/initramfs-tools/meson.build @@ -1,4 +1,4 @@ -initramfs_tools = find_program('update-initramfs', required: false) +initramfs_tools = find_program('update-initramfs', required: get_option('initramfs_tools')) if initramfs_tools.found() initramfstools_dir = '/usr/share/initramfs-tools' @@ -11,6 +11,6 @@ if initramfs_tools.found() initramfs_data.set('libdir', libdir) subdir('hooks') subdir('scripts') -else +elif get_option('initramfs_tools').auto() warning('Will not install initramfs-tools module due to missing dependencies!') endif diff --git a/src/pins/file/meson.build b/src/pins/file/meson.build index 0e741db6..faacdb0d 100644 --- a/src/pins/file/meson.build +++ b/src/pins/file/meson.build @@ -41,6 +41,6 @@ if initramfs_tools.found() install_dir: initramfs_hooks_dir, configuration: initramfs_data, ) -else +elif get_option('initramfs_tools').auto() warning('Will not install initramfs module clevis-pin-file due to missing dependencies!') endif diff --git a/src/pins/template/meson.build b/src/pins/template/meson.build index ebb565f8..1fcee474 100644 --- a/src/pins/template/meson.build +++ b/src/pins/template/meson.build @@ -44,7 +44,7 @@ if dracut.found() install_dir: dracutdir, configuration: data, ) -else +elif get_option('initramfs_tools').auto() warning('Will not install dracut module clevis-pin-@pin@ due to missing dependencies!') endif @@ -61,6 +61,6 @@ if initramfs_tools.found() install_dir: initramfs_hooks_dir, configuration: initramfs_data, ) -else +elif get_option('initramfs_tools').auto() warning('Will not install initramfs module clevis-pin-@pin@ due to missing dependencies!') endif