diff mbox series

systemd-systemctl: Create machine-id with "uninitialized" text in it

Message ID 20230227191548.95504-1-marex@denx.de
State Accepted, archived
Commit 263c852269027b1bd311e116021ac49d9001e1b0
Headers show
Series systemd-systemctl: Create machine-id with "uninitialized" text in it | expand

Commit Message

Marek Vasut Feb. 27, 2023, 7:15 p.m. UTC
Instead of creating empty /etc/machine-id file using touch, write
text "uninitialized" into it. Systemd requires "uninitialized" in
the /etc/machine-id file to trigger systemd-firstboot .

Signed-off-by: Marek Vasut <marex@denx.de>
---
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Armin Kuster <akuster808@gmail.com>
Cc: Bob Henz <robert_henz@jabil.com>
Cc: Kristian Klausen <kristian@klausen.dk>
Cc: Nick Potenski <nick.potenski@garmin.com>
Cc: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/recipes-core/systemd/systemd-systemctl/systemctl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

ChenQi March 15, 2023, 10:10 a.m. UTC | #1
This patch is forcing systemd to do preset-all at boot time (first boot) 
in a function that simulates 'preset-all' at rootfs time.

If we look at the comments above the changed line, we can see that the 
/etc/machine-id file was deliberately created as empty, for the purpose 
of making systemd not treat the system as first boot.
"""
     # If we populate the systemd links we also create /etc/machine-id, 
which
     # allows systemd to boot with the filesystem read-only before 
generating
     # a real value and then committing it back.
     #
     # For the stateless configuration, where /etc is generated at runtime
     # (for example on a tmpfs), this script shouldn't run at all and we
     # allow systemd to completely populate /etc.
"""

I'm going to send out a patch to revert this patch.

Regards,
Qi

On 2/28/23 03:15, Marek Vasut wrote:
> Instead of creating empty /etc/machine-id file using touch, write
> text "uninitialized" into it. Systemd requires "uninitialized" in
> the /etc/machine-id file to trigger systemd-firstboot .
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> ---
> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Cc: Armin Kuster <akuster808@gmail.com>
> Cc: Bob Henz <robert_henz@jabil.com>
> Cc: Kristian Klausen <kristian@klausen.dk>
> Cc: Nick Potenski <nick.potenski@garmin.com>
> Cc: Richard Purdie <richard.purdie@linuxfoundation.org>
> ---
>   meta/recipes-core/systemd/systemd-systemctl/systemctl | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/meta/recipes-core/systemd/systemd-systemctl/systemctl b/meta/recipes-core/systemd/systemd-systemctl/systemctl
> index cddae75a06..45b29671ee 100755
> --- a/meta/recipes-core/systemd/systemd-systemctl/systemctl
> +++ b/meta/recipes-core/systemd/systemd-systemctl/systemctl
> @@ -302,7 +302,7 @@ def preset_all(root):
>       # For the stateless configuration, where /etc is generated at runtime
>       # (for example on a tmpfs), this script shouldn't run at all and we
>       # allow systemd to completely populate /etc.
> -    (root / SYSCONFDIR / "machine-id").touch()
> +    (root / SYSCONFDIR / "machine-id").write_text("uninitialized")
>   
>   
>   def main():
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#177804): https://lists.openembedded.org/g/openembedded-core/message/177804
> Mute This Topic: https://lists.openembedded.org/mt/97273986/7304865
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [Qi.Chen@eng.windriver.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Marek Vasut March 17, 2023, 11:53 a.m. UTC | #2
On 3/15/23 11:10, ChenQi wrote:

Hi,

> This patch is forcing systemd to do preset-all at boot time (first boot) 
> in a function that simulates 'preset-all' at rootfs time.
> 
> If we look at the comments above the changed line, we can see that the 
> /etc/machine-id file was deliberately created as empty, for the purpose 
> of making systemd not treat the system as first boot.
> """
>      # If we populate the systemd links we also create /etc/machine-id, 
> which
>      # allows systemd to boot with the filesystem read-only before 
> generating
>      # a real value and then committing it back.
>      #
>      # For the stateless configuration, where /etc is generated at runtime
>      # (for example on a tmpfs), this script shouldn't run at all and we
>      # allow systemd to completely populate /etc.
> """
> 
> I'm going to send out a patch to revert this patch.

Hmmm, the problem is that without this patch, systemd firstboot does not 
work and I would like to use that. How can we accommodate both options, 
i.e. no breakage for you and working systemd-firstboot ?
ChenQi March 17, 2023, 2:32 p.m. UTC | #3
Hi Marek,

I used the following line in local.conf and the firstboot worked:
IMAGE_PREPROCESS_COMMAND:remove = "systemd_preset_all;"

Regards,
Qi

-----Original Message-----
From: Marek Vasut <marex@denx.de> 
Sent: Friday, March 17, 2023 7:54 PM
To: Chen, Qi <Qi.Chen@windriver.com>; openembedded-core@lists.openembedded.org
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>; Armin Kuster <akuster808@gmail.com>; Bob Henz <robert_henz@jabil.com>; Kristian Klausen <kristian@klausen.dk>; Nick Potenski <nick.potenski@garmin.com>; Richard Purdie <richard.purdie@linuxfoundation.org>
Subject: Re: [OE-core] [PATCH] systemd-systemctl: Create machine-id with "uninitialized" text in it

On 3/15/23 11:10, ChenQi wrote:

Hi,

> This patch is forcing systemd to do preset-all at boot time (first 
> boot) in a function that simulates 'preset-all' at rootfs time.
> 
> If we look at the comments above the changed line, we can see that the 
> /etc/machine-id file was deliberately created as empty, for the 
> purpose of making systemd not treat the system as first boot.
> """
>      # If we populate the systemd links we also create 
> /etc/machine-id, which
>      # allows systemd to boot with the filesystem read-only before 
> generating
>      # a real value and then committing it back.
>      #
>      # For the stateless configuration, where /etc is generated at 
> runtime
>      # (for example on a tmpfs), this script shouldn't run at all and 
> we
>      # allow systemd to completely populate /etc.
> """
> 
> I'm going to send out a patch to revert this patch.

Hmmm, the problem is that without this patch, systemd firstboot does not work and I would like to use that. How can we accommodate both options, i.e. no breakage for you and working systemd-firstboot ?
Marek Vasut March 19, 2023, 10:55 p.m. UTC | #4
On 3/17/23 15:32, Chen, Qi wrote:
> Hi Marek,

Hi,

sorry for the delay

> I used the following line in local.conf and the firstboot worked:
> IMAGE_PREPROCESS_COMMAND:remove = "systemd_preset_all;"

But doesn't that also inhibit the rootfs-time preset-all ? I would like 
to keep that, I just need for the systemd firstboot units to run on 
first boot to do first boot system setup things, which they won't 
without the 'uninitialized' in /etc/machine-id .

> -----Original Message-----
> From: Marek Vasut <marex@denx.de>
> Sent: Friday, March 17, 2023 7:54 PM
> To: Chen, Qi <Qi.Chen@windriver.com>; openembedded-core@lists.openembedded.org
> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>; Armin Kuster <akuster808@gmail.com>; Bob Henz <robert_henz@jabil.com>; Kristian Klausen <kristian@klausen.dk>; Nick Potenski <nick.potenski@garmin.com>; Richard Purdie <richard.purdie@linuxfoundation.org>
> Subject: Re: [OE-core] [PATCH] systemd-systemctl: Create machine-id with "uninitialized" text in it
> 
> On 3/15/23 11:10, ChenQi wrote:
> 
> Hi,
> 
>> This patch is forcing systemd to do preset-all at boot time (first
>> boot) in a function that simulates 'preset-all' at rootfs time.
>>
>> If we look at the comments above the changed line, we can see that the
>> /etc/machine-id file was deliberately created as empty, for the
>> purpose of making systemd not treat the system as first boot.
>> """
>>       # If we populate the systemd links we also create
>> /etc/machine-id, which
>>       # allows systemd to boot with the filesystem read-only before
>> generating
>>       # a real value and then committing it back.
>>       #
>>       # For the stateless configuration, where /etc is generated at
>> runtime
>>       # (for example on a tmpfs), this script shouldn't run at all and
>> we
>>       # allow systemd to completely populate /etc.
>> """
>>
>> I'm going to send out a patch to revert this patch.
> 
> Hmmm, the problem is that without this patch, systemd firstboot does not work and I would like to use that. How can we accommodate both options, i.e. no breakage for you and working systemd-firstboot ?
ChenQi March 20, 2023, 2:23 a.m. UTC | #5
On 3/20/23 06:55, Marek Vasut wrote:
> On 3/17/23 15:32, Chen, Qi wrote:
>> Hi Marek,
>
> Hi,
>
> sorry for the delay
>
>> I used the following line in local.conf and the firstboot worked:
>> IMAGE_PREPROCESS_COMMAND:remove = "systemd_preset_all;"
>
> But doesn't that also inhibit the rootfs-time preset-all ? I would 
> like to keep that, I just need for the systemd firstboot units to run 
> on first boot to do first boot system setup things, which they won't 
> without the 'uninitialized' in /etc/machine-id .


1) Lacking of /etc/machine-id file also triggers firstboot.

2) systemd firstboot does 'preset-all'. If you enable firstboot, then 
you don't need rootfs-time preset-all.

Regards,

Qi


>
>> -----Original Message-----
>> From: Marek Vasut <marex@denx.de>
>> Sent: Friday, March 17, 2023 7:54 PM
>> To: Chen, Qi <Qi.Chen@windriver.com>; 
>> openembedded-core@lists.openembedded.org
>> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>; Armin Kuster 
>> <akuster808@gmail.com>; Bob Henz <robert_henz@jabil.com>; Kristian 
>> Klausen <kristian@klausen.dk>; Nick Potenski 
>> <nick.potenski@garmin.com>; Richard Purdie 
>> <richard.purdie@linuxfoundation.org>
>> Subject: Re: [OE-core] [PATCH] systemd-systemctl: Create machine-id 
>> with "uninitialized" text in it
>>
>> On 3/15/23 11:10, ChenQi wrote:
>>
>> Hi,
>>
>>> This patch is forcing systemd to do preset-all at boot time (first
>>> boot) in a function that simulates 'preset-all' at rootfs time.
>>>
>>> If we look at the comments above the changed line, we can see that the
>>> /etc/machine-id file was deliberately created as empty, for the
>>> purpose of making systemd not treat the system as first boot.
>>> """
>>>       # If we populate the systemd links we also create
>>> /etc/machine-id, which
>>>       # allows systemd to boot with the filesystem read-only before
>>> generating
>>>       # a real value and then committing it back.
>>>       #
>>>       # For the stateless configuration, where /etc is generated at
>>> runtime
>>>       # (for example on a tmpfs), this script shouldn't run at all and
>>> we
>>>       # allow systemd to completely populate /etc.
>>> """
>>>
>>> I'm going to send out a patch to revert this patch.
>>
>> Hmmm, the problem is that without this patch, systemd firstboot does 
>> not work and I would like to use that. How can we accommodate both 
>> options, i.e. no breakage for you and working systemd-firstboot ?
Marek Vasut March 20, 2023, 10:21 a.m. UTC | #6
On 3/20/23 03:23, ChenQi wrote:
> On 3/20/23 06:55, Marek Vasut wrote:
>> On 3/17/23 15:32, Chen, Qi wrote:
>>> Hi Marek,
>>
>> Hi,
>>
>> sorry for the delay
>>
>>> I used the following line in local.conf and the firstboot worked:
>>> IMAGE_PREPROCESS_COMMAND:remove = "systemd_preset_all;"
>>
>> But doesn't that also inhibit the rootfs-time preset-all ? I would 
>> like to keep that, I just need for the systemd firstboot units to run 
>> on first boot to do first boot system setup things, which they won't 
>> without the 'uninitialized' in /etc/machine-id .
> 
> 
> 1) Lacking of /etc/machine-id file also triggers firstboot.
> 
> 2) systemd firstboot does 'preset-all'. If you enable firstboot, then 
> you don't need rootfs-time preset-all.

All right, thank you. Please go ahead with the revert.

But can you please document this IMAGE_PREPROCESS_COMMAND:remove = 
"systemd_preset_all;" somewhere at least in the commit message, so 
others who run into non-working firstboot won't have to struggle with it 
? Maybe even add this into the comment in 'systemctl' script ?
diff mbox series

Patch

diff --git a/meta/recipes-core/systemd/systemd-systemctl/systemctl b/meta/recipes-core/systemd/systemd-systemctl/systemctl
index cddae75a06..45b29671ee 100755
--- a/meta/recipes-core/systemd/systemd-systemctl/systemctl
+++ b/meta/recipes-core/systemd/systemd-systemctl/systemctl
@@ -302,7 +302,7 @@  def preset_all(root):
     # For the stateless configuration, where /etc is generated at runtime
     # (for example on a tmpfs), this script shouldn't run at all and we
     # allow systemd to completely populate /etc.
-    (root / SYSCONFDIR / "machine-id").touch()
+    (root / SYSCONFDIR / "machine-id").write_text("uninitialized")
 
 
 def main():