gpt-auto-generator: optionally, set up root fs via dissection logic
This introduces root=dissect, which is a lot like root=gpt-auto, but uses the image dissection logic to find the root partition. It's also based on the GPT efi var telling us about the root disk, but instead of just picking some suitable root disk manually it uses the dissection logic. This is a big step forward, since it means we can actually make use of the image policy logic for the root fs too.
This commit is contained in:
+15
-2
@@ -1089,7 +1089,10 @@ bool generator_soft_rebooted(void) {
|
||||
GptAutoRoot parse_gpt_auto_root(const char *value) {
|
||||
assert(value);
|
||||
|
||||
/* Parses the 'gpt-auto'/'gpt-auto-root' parameters to root= */
|
||||
/* Parses the 'gpt-auto'/'gpt-auto-root'/'dissect'/'dissect-force' parameters to root=
|
||||
*
|
||||
* note that we are not using a regular string table here, because the mode names don't fully match
|
||||
* the parameter names. And root= being something else is not an error. */
|
||||
|
||||
if (streq(value, "gpt-auto")) {
|
||||
log_debug("Enabling root partition auto-detection (respecting factory reset mode), root= is explicitly set to 'gpt-auto'.");
|
||||
@@ -1101,6 +1104,16 @@ GptAutoRoot parse_gpt_auto_root(const char *value) {
|
||||
return GPT_AUTO_ROOT_FORCE;
|
||||
}
|
||||
|
||||
log_debug("Disabling root partition auto-detection, root= is neither unset, nor set to 'gpt-auto' or 'gpt-auto-force'.");
|
||||
if (streq(value, "dissect")) {
|
||||
log_debug("Enabling root partition auto-detection via full image dissection (respecting factory reset mode), root= is explicitly set to 'dissect'.");
|
||||
return GPT_AUTO_ROOT_DISSECT;
|
||||
}
|
||||
|
||||
if (streq(value, "dissect-force")) {
|
||||
log_debug("Enabling root partition auto-detection via full image dissection (ignoring factory reset mode), root= is explicitly set to 'dissect-force'.");
|
||||
return GPT_AUTO_ROOT_DISSECT_FORCE;
|
||||
}
|
||||
|
||||
log_debug("Disabling root partition auto-detection, root= is neither unset, nor set to 'gpt-auto', 'gpt-auto-force', 'dissect' or 'dissect-force'.");
|
||||
return GPT_AUTO_ROOT_OFF;
|
||||
}
|
||||
|
||||
@@ -122,9 +122,11 @@ bool generator_soft_rebooted(void);
|
||||
exit_failure_if_negative)
|
||||
|
||||
typedef enum GptAutoRoot {
|
||||
GPT_AUTO_ROOT_OFF = 0, /* root= set to something else */
|
||||
GPT_AUTO_ROOT_ON, /* root= set explicitly to "gpt-auto" */
|
||||
GPT_AUTO_ROOT_FORCE, /* root= set explicitly to "gpt-auto-force" → ignores factory reset mode */
|
||||
GPT_AUTO_ROOT_OFF = 0, /* root= set to something else */
|
||||
GPT_AUTO_ROOT_ON, /* root= set explicitly to "gpt-auto" */
|
||||
GPT_AUTO_ROOT_FORCE, /* root= set explicitly to "gpt-auto-force" → ignores factory reset mode */
|
||||
GPT_AUTO_ROOT_DISSECT, /* root= set to "dissect" */
|
||||
GPT_AUTO_ROOT_DISSECT_FORCE, /* root= set to "dissect-force" → ignores factory reset mode */
|
||||
_GPT_AUTO_ROOT_MAX,
|
||||
_GPT_AUTO_ROOT_INVALID = -EINVAL,
|
||||
} GptAutoRoot;
|
||||
|
||||
Reference in New Issue
Block a user