Hey again,
I'm back with more annoying questions about sysext :D
According to the docs, sysext only "extends" the existing usr/opt/etc with the sysext contents but we are seeing a different thing here:
root@cos-recovery:~# stat /usr/local/file2
File: /usr/local/file2
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 0,47 Inode: 171 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-06-10 14:56:50.725904625 +0000
Modify: 2024-06-10 14:56:50.725904625 +0000
Change: 2024-06-10 14:56:50.725904625 +0000
Birth: 2024-06-10 14:56:50.725904625 +0000
root@cos-recovery:~# systemd-sysext refresh
Using extensions 'work'.
Merged extensions into '/usr'.
root@cos-recovery:~# stat /usr/local/file2
stat: cannot statx '/usr/local/file2': No such file or directory
File: /usr/local/file2
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 0,47 Inode: 171 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-06-10 14:56:50.725904625 +0000
Modify: 2024-06-10 14:56:50.725904625 +0000
Change: 2024-06-10 14:56:50.725904625 +0000
Birth: 2024-06-10 14:56:50.725904625 +0000
root@cos-recovery:~# systemd-sysext refresh
Using extensions 'work'.
Merged extensions into '/usr'.
root@cos-recovery:~# stat /usr/local/file2
stat: cannot statx '/usr/local/file2': No such file or directory
root@cos-recovery:~# systemd-sysext unmerge
Unmerged '/usr'.
root@cos-recovery:~# stat /usr/local/file2
File: /usr/local/file2
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 0,47 Inode: 171 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-06-10 14:56:50.725904625 +0000
Modify: 2024-06-10 14:56:50.725904625 +0000
Change: 2024-06-10 14:56:50.725904625 +0000
Birth: 2024-06-10 14:56:50.725904625 +0000
Unmerged '/usr'.
root@cos-recovery:~# stat /usr/local/file2
File: /usr/local/file2
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 0,47 Inode: 171 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-06-10 14:56:50.725904625 +0000
Modify: 2024-06-10 14:56:50.725904625 +0000
Change: 2024-06-10 14:56:50.725904625 +0000
Birth: 2024-06-10 14:56:50.725904625 +0000
Weirdly enough, any files under /usr/ that we create are NOT overridden when we load any sysext, it only seems to happen in the dirs inside /usr
It's true that we are using USI here and on a "normal" non-USI/UKI system this behaviour doesn't seem to happen.
The main difference I can see is that the root fs in the failure
case is a tmpfs while in the working case it's an ext4 fs, but for
example our /usr/local is mounted to a ext4 disk:
/dev/mapper/vda3 on /usr/local type ext4 (rw,relatime)
If I do create an overlay on /usr then it seems to work as expected but its too late for us, we lose anything mounted there and hidden dirs.
Is this a bug or its expected behaviour? Is there anything we could be missing that triggers this behaviour? Any pointers on why this would react like this?
Cheers,
Itxaka