firstboot: permit setting the static hostname via a system credential
For the IMDS case there's value in being able to set the static hostname, instead of just the transient one. Let's introduce firstboot.hostname, which only applies to first boot, and write the static hostname. This is different from system.hostname which applies to any boot, and writes the transient hostname.
This commit is contained in:
@@ -447,6 +447,17 @@
|
||||
|
||||
<xi:include href="version-info.xml" xpointer="v249"/></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>firstboot.hostname</varname></term>
|
||||
|
||||
<listitem><para>This credential specifies the static system hostname to set during first boot. The
|
||||
user will not be prompted for the hostname. Note that this controls the static hostname, not the
|
||||
transient hostname, and only has an effect on first boot, unlike
|
||||
<varname>system.hostname</varname>.</para>
|
||||
|
||||
<xi:include href="version-info.xml" xpointer="v261"/></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>Note that by default the <filename>systemd-firstboot.service</filename> unit file is set up to
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<varlistentry>
|
||||
<term><varname>firstboot.keymap</varname></term>
|
||||
<listitem>
|
||||
<para>The console key mapping to set (e.g. <literal>de</literal>). Read by
|
||||
<para>The console key mapping to set (e.g. <literal>de</literal>). Read by
|
||||
<citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||
and only honoured if no console keymap has been configured before.</para>
|
||||
|
||||
@@ -52,6 +52,20 @@
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>firstboot.hostname</varname></term>
|
||||
|
||||
<listitem><para>This credential specifies the static system hostname to set during first boot. The
|
||||
user will not be prompted for the hostname. Note that this controls the static hostname, not the transient
|
||||
hostname, and only has an effect on first boot, unlike <varname>system.hostname</varname> (see
|
||||
below). Read by
|
||||
<citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||
and only honoured if no static hostname has been configured before.</para>
|
||||
|
||||
<xi:include href="version-info.xml" xpointer="v261"/>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>firstboot.locale</varname></term>
|
||||
<term><varname>firstboot.locale-messages</varname></term>
|
||||
@@ -398,9 +412,10 @@
|
||||
<term><varname>system.hostname</varname></term>
|
||||
<listitem>
|
||||
<para>Accepts a (transient) hostname to configure during early boot. The static hostname specified
|
||||
in <filename>/etc/hostname</filename>, if configured, takes precedence over this setting.
|
||||
Interpreted by the service manager (PID 1). For details see
|
||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
|
||||
in <filename>/etc/hostname</filename>, if configured, takes precedence over this setting.
|
||||
Interpreted by the service manager (PID 1). For details see
|
||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>. Also
|
||||
see <varname>firstboot.hostname</varname> above.</para>
|
||||
|
||||
<xi:include href="version-info.xml" xpointer="v254"/>
|
||||
</listitem>
|
||||
|
||||
@@ -655,6 +655,19 @@ static int prompt_hostname(int rfd, sd_varlink **mute_console_link) {
|
||||
if (arg_hostname)
|
||||
return 0;
|
||||
|
||||
_cleanup_free_ char *hn = NULL;
|
||||
r = read_credential("firstboot.hostname", (void**) &hn, NULL);
|
||||
if (r < 0)
|
||||
log_debug_errno(r, "Failed to read credential firstboot.hostname, ignoring: %m");
|
||||
else if (!hostname_is_valid(hn, VALID_HOSTNAME_TRAILING_DOT|VALID_HOSTNAME_QUESTION_MARK))
|
||||
log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Hostname '%s' supplied via credential is not valid, ignoring.", hn);
|
||||
else {
|
||||
log_debug("Acquired hostname from credentials.");
|
||||
arg_hostname = TAKE_PTR(hn);
|
||||
hostname_cleanup(arg_hostname);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!arg_prompt_hostname) {
|
||||
log_debug("Prompting for hostname was not requested.");
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user