Merge pull request #21757 from DaanDeMeyer/boot-id

kernel-install: Introduce KERNEL_INSTALL_MACHINE_ID in /etc/machine-info
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2021-12-16 13:47:17 +01:00 committed by GitHub
commit 0c0bb433db
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 2 deletions

9
NEWS
View file

@ -6401,6 +6401,15 @@ CHANGES WITH 234:
temporary directory is passed as the entry directory and removed temporary directory is passed as the entry directory and removed
after all the plugins exit. after all the plugins exit.
* If KERNEL_INSTALL_MACHINE_ID is set in /etc/machine-info, kernel-install
will now use its value as the machine ID instead of the machine ID
from /etc/machine-id. If KERNEL_INSTALL_MACHINE_ID isn't set in
/etc/machine-info and no machine ID is set in /etc/machine-id,
kernel-install will try to store the current machine ID there as
KERNEL_INSTALL_MACHINE_ID. If there is no machine ID, kernel-install
will generate a new UUID, store it in /etc/machine-info as
KERNEL_INSTALL_MACHINE_ID and use it as the machine ID.
Contributions from: Adrian Heine né Lang, Aggelos Avgerinos, Alexander Contributions from: Adrian Heine né Lang, Aggelos Avgerinos, Alexander
Kurtz, Alexandros Frantzis, Alexey Brodkin, Alex Lu, Amir Pakdel, Amir Kurtz, Alexandros Frantzis, Alexey Brodkin, Alex Lu, Amir Pakdel, Amir
Yalon, Anchor Cat, Anthony Parsons, Bastien Nocera, Benjamin Gilbert, Yalon, Anchor Cat, Anthony Parsons, Bastien Nocera, Benjamin Gilbert,

View file

@ -228,6 +228,18 @@
<command>kernel-install</command> will use <literal>Default</literal> instead.</para> <command>kernel-install</command> will use <literal>Default</literal> instead.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<filename>/etc/machine-info</filename>
</term>
<listitem>
<para>If this file contains the <varname>KERNEL_INSTALL_MACHINE_ID</varname> variable,
<command>kernel-install</command> will use it as <replaceable>MACHINE-ID</replaceable> instead of
the contents of <filename>/etc/machine-id</filename>. If the variable is not found in
<filename>/etc/machine-info</filename>, <command>kernel-install</command> will try to save the
machine ID it uses to install to <varname>$BOOT</varname> to this file.</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<filename>/etc/os-release</filename> <filename>/etc/os-release</filename>

View file

@ -128,6 +128,16 @@
specific as <literal>Left Rack, 2nd Shelf</literal>. specific as <literal>Left Rack, 2nd Shelf</literal>.
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><varname>KERNEL_INSTALL_MACHINE_ID=</varname></term>
<listitem><para>Specifies the installation-specific installation directory
<command>kernel-install</command> should use. The value must be a valid machine ID (32 hexadecimal
characters). This would generally be the original machine-id that was used when the boot loader
entries for this installation were first added. When not set, the current value of
<cite>machine-id(5)</cite> will be used.</para></listitem>
</varlistentry>
</variablelist> </variablelist>
</refsect1> </refsect1>

View file

@ -90,10 +90,18 @@ if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then
exit 1 exit 1
fi fi
[ -z "$MACHINE_ID" ] && [ -f /etc/machine-id ] && [ "$(stat -fc %T /etc/machine-id)" != "tmpfs" ] && read -r MACHINE_ID < /etc/machine-id # Prefer to use an existing machine ID from /etc/machine-info or /etc/machine-id. If we're using the machine
# ID /etc/machine-id, try to persist it in /etc/machine-info. If no machine ID is found, try to generate
# a new machine ID in /etc/machine-info. If that fails, use "Default".
[ -z "$MACHINE_ID" ] && [ -f /etc/machine-info ] && source /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
[ -z "$MACHINE_ID" ] && [ -f /etc/machine-id ] && read -r MACHINE_ID </etc/machine-id
[ -n "$MACHINE_ID" ] && [ -z "$KERNEL_INSTALL_MACHINE_ID" ] && echo "KERNEL_INSTALL_MACHINE_ID=$MACHINE_ID" >>/etc/machine-info
[ -z "$MACHINE_ID" ] && NEW_MACHINE_ID="$(systemd-id128 new)" && echo "KERNEL_INSTALL_MACHINE_ID=$NEW_MACHINE_ID" >>/etc/machine-info
[ -z "$MACHINE_ID" ] && [ -f /etc/machine-info ] && source /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID"
[ -z "$MACHINE_ID" ] && MACHINE_ID="Default" [ -z "$MACHINE_ID" ] && MACHINE_ID="Default"
[ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "Default" "loader/entries"; do [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do
for pref in "/efi" "/boot/efi" "/boot"; do for pref in "/efi" "/boot/efi" "/boot"; do
if [ -d "$pref/$suff" ]; then if [ -d "$pref/$suff" ]; then
BOOT_ROOT="$pref" BOOT_ROOT="$pref"