classes/image-postproc-extension: Remove /etc/machine-id

Message ID 20220419153640.222797-1-Quirin.Gylstorff@siemens.com
State Superseded, archived
Headers show
Series classes/image-postproc-extension: Remove /etc/machine-id | expand

Commit Message

Quirin Gylstorff April 19, 2022, 7:36 a.m. UTC
From: kas <kas@example.com>

In a read-only system the machine id should be deleted or 
set to `unitialized\n`[1]. 

Systemd will generate a new machine-id during the first boot. 
In the case of a read-only root file system Systemd generates a mount point with 
the machine id. If an overlay for /etc is used this creates a mount conflict. 
To avoid the conflict between the overlay filesystem and systemd /etc/machine-id 
mount point deleted the file /etc/machine-id.

[1]: https://systemd.io/BUILDING_IMAGES/

Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
---
 meta/classes/image-postproc-extension.bbclass | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jan Kiszka April 19, 2022, 8:15 a.m. UTC | #1
On 19.04.22 17:36, Q. Gylstorff wrote:
> From: kas <kas@example.com>
> 
> In a read-only system the machine id should be deleted or 
> set to `unitialized\n`[1]. 
> 
> Systemd will generate a new machine-id during the first boot. 
> In the case of a read-only root file system Systemd generates a mount point with 
> the machine id. If an overlay for /etc is used this creates a mount conflict. 
> To avoid the conflict between the overlay filesystem and systemd /etc/machine-id 
> mount point deleted the file /etc/machine-id.
> 
> [1]: https://systemd.io/BUILDING_IMAGES/
> 
> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> ---
>  meta/classes/image-postproc-extension.bbclass | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/meta/classes/image-postproc-extension.bbclass b/meta/classes/image-postproc-extension.bbclass
> index ca520273..0c412c0d 100644
> --- a/meta/classes/image-postproc-extension.bbclass
> +++ b/meta/classes/image-postproc-extension.bbclass
> @@ -57,7 +57,7 @@ ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_machine_id"
>  image_postprocess_machine_id() {
>      # systemd(1) takes care of recreating the machine-id on first boot
>      sudo rm -f '${IMAGE_ROOTFS}/var/lib/dbus/machine-id'
> -    sudo install -m 644 '/dev/null' '${IMAGE_ROOTFS}/etc/machine-id'
> +    sudo rm -f '${IMAGE_ROOTFS}/etc/machine-id'
>  }
>  
>  ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_sshd_key_regen"

This partially reverts 98d6a72d3064. Did you read that commit and can
you comment on it in your patch?

Jan
Anton Mikanovich April 19, 2022, 11:10 a.m. UTC | #2
19.04.2022 18:36, Q. Gylstorff wrote:
> From: kas <kas@example.com>
>
> In a read-only system the machine id should be deleted or
> set to `unitialized\n`[1].
>
> Systemd will generate a new machine-id during the first boot.
> In the case of a read-only root file system Systemd generates a mount point with
> the machine id. If an overlay for /etc is used this creates a mount conflict.
> To avoid the conflict between the overlay filesystem and systemd /etc/machine-id
> mount point deleted the file /etc/machine-id.
>
> [1]: https://systemd.io/BUILDING_IMAGES/
>
> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> ---
>   meta/classes/image-postproc-extension.bbclass | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/meta/classes/image-postproc-extension.bbclass b/meta/classes/image-postproc-extension.bbclass
> index ca520273..0c412c0d 100644
> --- a/meta/classes/image-postproc-extension.bbclass
> +++ b/meta/classes/image-postproc-extension.bbclass
> @@ -57,7 +57,7 @@ ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_machine_id"
>   image_postprocess_machine_id() {
>       # systemd(1) takes care of recreating the machine-id on first boot
>       sudo rm -f '${IMAGE_ROOTFS}/var/lib/dbus/machine-id'
> -    sudo install -m 644 '/dev/null' '${IMAGE_ROOTFS}/etc/machine-id'
> +    sudo rm -f '${IMAGE_ROOTFS}/etc/machine-id'
>   }
>   
>   ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_sshd_key_regen"

Hello, Quirin
Please try to use real 'From' field in patchsets.
Henning Schild April 20, 2022, 12:44 a.m. UTC | #3
Am Tue, 19 Apr 2022 17:36:40 +0200
schrieb "Q. Gylstorff" <Quirin.Gylstorff@siemens.com>:

> From: kas <kas@example.com>
> 
> In a read-only system the machine id should be deleted or 
> set to `unitialized\n`[1]. 
> 
> Systemd will generate a new machine-id during the first boot. 
> In the case of a read-only root file system Systemd generates a mount
> point with the machine id. If an overlay for /etc is used this
> creates a mount conflict. To avoid the conflict between the overlay
> filesystem and systemd /etc/machine-id mount point deleted the file
> /etc/machine-id.
> 
> [1]: https://systemd.io/BUILDING_IMAGES/

This is full of good stuff which should probably go into Isar. i.e.
other files to remove, and systemd-repart systemd-growfs

Or systemd-makefs for additional partitions. While wic can do that as
well, you could quickly run into uuid duplication across devices.

Henning

> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> ---
>  meta/classes/image-postproc-extension.bbclass | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/meta/classes/image-postproc-extension.bbclass
> b/meta/classes/image-postproc-extension.bbclass index
> ca520273..0c412c0d 100644 ---
> a/meta/classes/image-postproc-extension.bbclass +++
> b/meta/classes/image-postproc-extension.bbclass @@ -57,7 +57,7 @@
> ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_machine_id"
> image_postprocess_machine_id() { # systemd(1) takes care of
> recreating the machine-id on first boot sudo rm -f
> '${IMAGE_ROOTFS}/var/lib/dbus/machine-id'
> -    sudo install -m 644 '/dev/null' '${IMAGE_ROOTFS}/etc/machine-id'
> +    sudo rm -f '${IMAGE_ROOTFS}/etc/machine-id'
>  }
>  
>  ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_sshd_key_regen"
Henning Schild April 20, 2022, 1 a.m. UTC | #4
Am Tue, 19 Apr 2022 18:15:10 +0200
schrieb Jan Kiszka <jan.kiszka@siemens.com>:

> On 19.04.22 17:36, Q. Gylstorff wrote:
> > From: kas <kas@example.com>
> > 
> > In a read-only system the machine id should be deleted or 
> > set to `unitialized\n`[1]. 
> > 
> > Systemd will generate a new machine-id during the first boot. 
> > In the case of a read-only root file system Systemd generates a
> > mount point with the machine id. If an overlay for /etc is used
> > this creates a mount conflict. To avoid the conflict between the
> > overlay filesystem and systemd /etc/machine-id mount point deleted
> > the file /etc/machine-id.
> > 
> > [1]: https://systemd.io/BUILDING_IMAGES/
> > 
> > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> > ---
> >  meta/classes/image-postproc-extension.bbclass | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/meta/classes/image-postproc-extension.bbclass
> > b/meta/classes/image-postproc-extension.bbclass index
> > ca520273..0c412c0d 100644 ---
> > a/meta/classes/image-postproc-extension.bbclass +++
> > b/meta/classes/image-postproc-extension.bbclass @@ -57,7 +57,7 @@
> > ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_machine_id"
> > image_postprocess_machine_id() { # systemd(1) takes care of
> > recreating the machine-id on first boot sudo rm -f
> > '${IMAGE_ROOTFS}/var/lib/dbus/machine-id'
> > -    sudo install -m 644 '/dev/null'
> > '${IMAGE_ROOTFS}/etc/machine-id'
> > +    sudo rm -f '${IMAGE_ROOTFS}/etc/machine-id'
> >  }
> >  
> >  ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_sshd_key_regen"  
> 
> This partially reverts 98d6a72d3064. Did you read that commit and can
> you comment on it in your patch?

In fact the man pages changes a bit from buster to bullseye, but having
the machine-id being an empty file still seems the most generic way
which should cover both older and newer systemd. However we will never
have a "first boot" "ConditionFirstBoot=yes" when using that empty
file, i tend to think removal is the correct way ... at least for newer
systemd.

https://manpages.debian.org/buster/systemd/machine-id.5.en.html

says

> Having an empty file in place is useful because it allows a temporary
> file to be bind-mounted over the real file, in case the image is used
> read-only.

https://manpages.debian.org/bullseye/systemd/machine-id.5.en.html

says 

> 3.If /etc/machine-id exists and is empty, a boot is not considered
> the first boot. systemd will still bind-mount a file containing the
> actual machine-id over it and later try to commit it to disk (if
> /etc/ is writable).

Which makes me wonder if we want systemd to know that it is the first
boot, i bet we would want that ... and not want an empty machine id.
Also the link quirin sent ... coming directly from systemd says one
should remove the file.

Maybe things really changed between buster and bullseye and we need to
do other things for more recent systemd.

Henning

> Jan
>

Patch

diff --git a/meta/classes/image-postproc-extension.bbclass b/meta/classes/image-postproc-extension.bbclass
index ca520273..0c412c0d 100644
--- a/meta/classes/image-postproc-extension.bbclass
+++ b/meta/classes/image-postproc-extension.bbclass
@@ -57,7 +57,7 @@  ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_machine_id"
 image_postprocess_machine_id() {
     # systemd(1) takes care of recreating the machine-id on first boot
     sudo rm -f '${IMAGE_ROOTFS}/var/lib/dbus/machine-id'
-    sudo install -m 644 '/dev/null' '${IMAGE_ROOTFS}/etc/machine-id'
+    sudo rm -f '${IMAGE_ROOTFS}/etc/machine-id'
 }
 
 ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_sshd_key_regen"