osutil: add KernelCommandLineKeyValue; boot: refactor ModeAnd...FromKernelCommandLine (#9659)
* boot/cmdline.go: add TODO about using strutil.KernelCommandLineSplit
Signed-off-by: Ian Johnson <email address hidden>
* strutil/cmdline.go: add GetKernelCommandLineKeyValue
This complements KernelCommandLineSplit, but goes further, checking for a
specific key-value pair in the kernel command line parameters, and returning the
value if found. This will be useful across the codebase for places where we want
to check one specific kernel command line parameter key-value pair.
Signed-off-by: Ian Johnson <email address hidden>
* logger/logger.go: use GetKernelCommandLineKeyValue directly
This is a bit more straight forward to read IMHO and potentially reduces some
looping over the parameters as we break as soon as we find snapd.debug in the
positive case where it is set.
Signed-off-by: Ian Johnson <email address hidden>
* strutil,osutil: move kernel commandline helpers to osutil
* boot: tweak TODO now that we use osutil.KernelCommandLineSplit
* many: refactor ModeAnd...FromKernelCommandLine and KernelCommandLineKeyValue
Refactor GetKernelCommandLineKeyValue to KernelCommandLineKeyValue which
returns a map of the specified keys that were found on the kernel command line
that have values. It also no longer takes the command line string as an
argument and instead parses the command line itself.
The above necessitates moving the mocking function for where to find
/proc/cmdline to osutil as well and adjusting many tests for this.
Finally, with all of this in place we can refactor
boot.ModeAndRecoverySystemFromKernelCommandLine to use the osutil helpers
and not duplicate parsing logic in the boot package. This does result in
a slight change in behavior where now duplicated kernel command line
parameters are not a fatal condition, but instead the last definition is
used.
Also adjust some tests to mock an empty proc/cmdline to avoid using the
host's version when running tests.
Signed-off-by: Ian Johnson <email address hidden>
* osutil, many: rename to KernelCommandLineKeyValues
Signed-off-by: Maciej Borzecki <email address hidden>
* boot: disallow non empty system label without a mode
Signed-off-by: Maciej Borzecki <email address hidden>
* osutil: tweak handling of cmdline keys
Signed-off-by: Maciej Borzecki <email address hidden>
* osutil: mv cmdline to kcmdline
Signed-off-by: Maciej Borzecki <email address hidden>
* osutil: comment tweak
Signed-off-by: Maciej Borzecki <email address hidden>
* logger: further tweaks
Signed-off-by: Maciej Borzecki <email address hidden>
Co-authored-by: Michael Vogt <email address hidden>
Co-authored-by: Maciej Borzecki <email address hidden>
devicestate: implement boot.HasFDESetupHook (#9667)
* devicestate: implement boot.HasFDESetupHook
This commit adds support for boot.HasFDESetupHook and matching
tests.
* devicestate: move hasFDESetupHook setup into delayedCrossMgrInit()
* boot,devicestate: use deviceCtx to get fde-setup hook data
* devicestate: improve TestHasFdeSetupHook test
* devicestate: tweak TestHasFdeSetupHook further
* boot,devicestate: remove "bootWith" from SealKeyToModeenv() again
* boot: tweak error message
Signed-off-by: Maciej Borzecki <email address hidden>
* o/devicestate: tweak error messages and comments
Signed-off-by: Maciej Borzecki <email address hidden>
Co-authored-by: Maciej Borzecki <email address hidden>