return True
-def config_file_location() -> Optional[Path]:
+def input_file_location(
+ filename: str,
+ *search_directories: str) -> Optional[Path]:
+
if root := os.getenv('KERNEL_INSTALL_CONF_ROOT'):
- p = Path(root) / 'uki.conf'
- else:
- p = Path('/etc/kernel/uki.conf')
- if p.exists():
- return p
+ search_directories = (root,)
+ elif not search_directories:
+ # This is the default search path.
+ search_directories = ('/etc/kernel',
+ '/usr/lib/kernel')
+
+ for dir in search_directories:
+ p = Path(dir) / filename
+ if p.exists():
+ return p
return None
-def kernel_cmdline_base() -> list[str]:
- if root := os.getenv('KERNEL_INSTALL_CONF_ROOT'):
- return Path(root).joinpath('cmdline').read_text().split()
+def uki_conf_location() -> Optional[Path]:
+ return input_file_location('uki.conf',
+ '/etc/kernel')
- for cmdline in ('/etc/kernel/cmdline',
- '/usr/lib/kernel/cmdline'):
- try:
- return Path(cmdline).read_text().split()
- except FileNotFoundError:
- continue
+def kernel_cmdline_base() -> list[str]:
+ path = input_file_location('cmdline')
+ if path:
+ return path.read_text().split()
+
+ # If we read /proc/cmdline, we need to do some additional filtering.
options = Path('/proc/cmdline').read_text().split()
return [opt for opt in options
if not opt.startswith(('BOOT_IMAGE=', 'initrd='))]
# argument set to prepopulate the namespace with the defaults.
opts2 = ukify['create_parser']().parse_args(['build'])
- opts2.config = config_file_location()
+ opts2.config = uki_conf_location()
opts2.uname = opts.kernel_version
opts2.linux = opts.kernel_image
opts2.initrd = initrd_list(opts)