On Fri, Feb 28, 2025 at 5:28 PM Alexis CELLIER <alexis.cell...@smile.fr> wrote:
>
> On Fri, Feb 28, 2025 at 5:33 PM Alex Kiernan <alex.kier...@gmail.com> wrote:
> >
> > On Fri, Feb 28, 2025 at 3:57 PM Alexis CELLIER <alexis.cell...@smile.fr> 
> > wrote:
> > >
> > > On Wed, Feb 26, 2025 at 11:43 AM Vyacheslav Yurkov via
> > > lists.openembedded.org <uvv.mail=gmail....@lists.openembedded.org>
> > > wrote:
> > > >
> > > > On 25.02.2025 15:48, Ross Burton wrote:
> > > > > On 20 Feb 2025, at 15:33, Vyacheslav Yurkov <uvv.m...@gmail.com> 
> > > > > wrote:
> > > > >> Isn't is supposed to be created on first boot?
> > > > >
> > > > > Yes, ish, but our rootfs is read only at this point:
> > > > >
> > > > > [    7.639766] systemd[1]: System cannot boot: Missing 
> > > > > /etc/machine-id and /etc is mounted read-only.
> > > > > [    7.641135] systemd[1]: Booting up is supported only when:
> > > > > [    7.641844] systemd[1]: 1) /etc/machine-id exists and is populated.
> > > > > [    7.642588] systemd[1]: 2) /etc/machine-id exists and is empty.
> > > > > [    7.643279] systemd[1]: 3) /etc/machine-id is missing and /etc is 
> > > > > writable.
> > > > >
> > > > > On 20 Feb 2025, at 16:03, Alex Kiernan <alex.kier...@gmail.com> wrote:
> > > > >> I do know that it was a horrible thing to get right when I rewrote 
> > > > >> the
> > > > >> shell script in python (which I'm very glad to see the back of):
> > > > >>
> > > > >>     # 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.
> > > > >>
> > > > >> It may be that this behaviour was wrong in some cases, but at the 
> > > > >> same
> > > > >> time, I remember spending a lot of time getting this right!
> > > > > It certainly looks like it’s “tricky” to get the right semantics here 
> > > > > because the range of potential use-cases is too great.
> > > > >
> > > > > I believe we should be writing /etc/machine-id at rootfs time if 
> > > > > systemd is being used.  Currently this is done in the systemctl class 
> > > > > if it writes links, and then in the rootfs class if the rootfs is 
> > > > > read-only.
> > > > >
> > > > > I think we should consolidate those into the rootfs class, and give 
> > > > > the user the choice of whether to treat the image as booted or not by 
> > > > > writing either “” or “uninitialized” to the file as per 
> > > > > https://www.freedesktop.org/software/systemd/man/latest/machine-id.html#First%20Boot%20Semantics.
> > > > >
> > > > > tl;dr: if it contains “uninitialized” then this is the first boot, 
> > > > > otherwise it’s not.  By always touching the file we break the ability 
> > > > > for anyone to use systemd-first-boot or ConditionFirstBoot in their 
> > > > > own units, which seems wrong.
> > > > >
> > > > > We’re about a week from feature freeze and getting this merged would 
> > > > > be great, do you think you can finish this off Slava?
> > > > >
> > > > > Thanks,
> > > > > Ross
> > > >
> > > > I definitely gonna try. But I might be missing something, because I
> > > > thought it sums up as follows:
> > > >
> > > > RO rootfs -> empty machine-id
> > > > RW rootfs -> no machine-id
> > > >
> > > > And it does work that way when I rebuild my image with or without RO 
> > > > rootfs.
> > >
> > > At the moment on master, as systemd-systemctl python script touch the
> > > file, we can end up with an empty file independently of the
> > > IMAGE_FEATURE read-only-rootfs. So we do break the ability of
> > > firstboot in any case.
> > > Also, if you boot with your rootfs in ro (KERNEL_ARGS, wic, ...)
> > > without setting read-only-rootfs, with fstab that will remount your
> > > rootfs in rw (so you do not have a read-only rootfs), not having the
> > > /etc/machine-id file will make systemd fail (no not having
> > > /etc/machine-id seems dangerous te me).
> > >
> > > So why not put "uninitialized" in /etc/machine-id all the time
> > > (probably in rootfs post commands, if the file does not exist yet, to
> > > allow user to put a predefine one), it allows firstboot and prevent
> > > the dangerous case of not having the file. The only strange case would
> > > be when you do have a read-only filesystem, as you will always have a
> > > first boot.
> > > But if we do not want that strange behaviour by default, we can empty
> > > /etc/machine-id in case of read-only-rootfs (in rootfs post commands),
> > > or we let the decision to the user by letting him choose using the
> > > systemd PACKAGECONFIG to enable/disable the firstboot support.
> > >
> >
> > firstboot usage, really doesn't feel like a piece of package
> > configuration to me, possibly distro config, but having a
> > (potentially) interactive boot seems like an outlier in the OE world
> > (though I'm not saying it shouldn't be supported).
>
> It is already a PACKAGECONFIG of systemd, not enabled by default (not
> sure it was clear in my previous message).
>

I didn't look... though that's not unreasonable - I was thinking of it
as PACKAGECONFIG controlling whether firstboot happens.

> > Today we call the systemctl script as part of rootfs construction
> > which may touch /etc/machine-id, removing it from there and having it
> > obviously in one place as part of rootfs construction seems like it
> > ought to be an improvement.
>
> I do agree.
>
> I do have a question, it is possible to not end up with the
> /etc/machine-id file, i.e. not having the python script called (on
> master)?

You can - if you add stateless-rootfs to IMAGE_FEATURES then systemctl
isn't called at image construction time, hence this part of the
comment in the script:

    # 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.

-- 
Alex Kiernan
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#212079): 
https://lists.openembedded.org/g/openembedded-core/message/212079
Mute This Topic: https://lists.openembedded.org/mt/111267385/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to