]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
homectl: optionally force interactive firstboot query
authorLennart Poettering <lennart@poettering.net>
Thu, 6 Feb 2025 10:59:40 +0000 (11:59 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 17 Feb 2025 14:21:18 +0000 (15:21 +0100)
docs/ENVIRONMENT.md
src/home/homectl.c

index 30c987f83411fcd2703ec870942b7becef3a4db7..b6e59144fbdd8d11ebb8d952557604fa03ceb5c9 100644 (file)
@@ -596,6 +596,13 @@ SYSTEMD_HOME_DEBUG_SUFFIX=foo \
   parts of the session continue running. Thus, we highly recommend that this variable
   isn't used unless necessary. Defaults to true.
 
+`homectl`:
+
+* `$SYSTEMD_HOME_FIRSTBOOT_OVERRIDE` – if set to "1" will make `homectl
+  firstboot --prompt-new-user` interactively ask for user creation, even if
+  there already exists at least one regular user on the system. If set to "0"
+  will make the tool skip any such query.
+
 `kernel-install`:
 
 * `$KERNEL_INSTALL_BYPASS` – If set to "1", execution of kernel-install is skipped
index ad372c84202b1352a728e051ab2b89479178f2d3..cc2f073582715ba4feffd7ba58387a5ac8a7b92e 100644 (file)
@@ -2697,12 +2697,20 @@ static int verb_firstboot(int argc, char *argv[], void *userdata) {
         if (r > 0) /* Already created users from credentials */
                 return 0;
 
-        r = has_regular_user();
-        if (r < 0)
-                return r;
-        if (r > 0) {
-                log_info("Regular user already present in user database, skipping user creation.");
+        r = getenv_bool("SYSTEMD_HOME_FIRSTBOOT_OVERRIDE");
+        if (r == 0)
                 return 0;
+        if (r < 0) {
+                if (r != -ENXIO)
+                        log_warning_errno(r, "Failed to parse $SYSTEMD_HOME_FIRSTBOOT_OVERRIDE, ignoring: %m");
+
+                r = has_regular_user();
+                if (r < 0)
+                        return r;
+                if (r > 0) {
+                        log_info("Regular user already present in user database, skipping user creation.");
+                        return 0;
+                }
         }
 
         return create_interactively();