<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:10.0pt;
        font-family:"Aptos",sans-serif;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Thank for this.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">We tested the move_mount syscall with the MOVE_MOUNT_BENEATH flag and found that it only works if the parent mount is set to private, which is related to how mount propagation works. This means it would only
 be usable on systems where the root filesystem is set to --make-private, or if we temporarily switch to a private state, perform the system-sysext operations, and then switch back to shared.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">We are not experts on the details of the VFS, but would this temporary switch to private affect mount spaces and make the updated system extensions invisible? Also, how would this approach impact portable
 services in systemd? Could it cause any issues with how portable service images are accessed or made visible, especially if they depend on shared mount propagation?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Umut<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div id="mail-editor-reference-message-container">
<div>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">Lennart Poettering <lennart@poettering.net><br>
<b>Date: </b>Thursday, 28 November 2024 at 09:49<br>
<b>To: </b>Umut Tezduyar Lindskog <Umut.Tezduyar@axis.com><br>
<b>Cc: </b>systemd-devel@lists.freedesktop.org <systemd-devel@lists.freedesktop.org><br>
<b>Subject: </b>Re: [systemd-devel] detaching existing extensions with new systemd extension attach<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">On Mi, 27.11.24 19:00, Umut Tezduyar Lindskog (Umut.Tezduyar@axis.com) wrote:<br>
<br>
> Hello systemd,<br>
><br>
> We are looking into systemd system extensions for quick patching our<br>
> immutable images while we are updating and rolling out the patched<br>
> immutable image.<br>
><br>
> One thing that is stated in the documentation is that before<br>
> attaching a new extension, all previous extensions are deattached<br>
> and everything are attached again. We understand that this sequence<br>
> is needed for overlayfs stacking in case something has changed in<br>
> the stack with the new extension.<br>
><br>
> For our use case, we would like to be able to push multiple patch<br>
> extensions (ex: couple of days apart) while keeping the service<br>
> downtime to a minimum. Technically we believe that if the extensions<br>
> are not overlapping there is no need to detach already attached<br>
> extensions. There is no built in option in systemd extensions to<br>
> keep the existing extensions right? Due to how overlayfs works, they<br>
> temporarly need to be removed and thenbrought up again, during a<br>
> refresh operation.<br>
<br>
There's actually a kernel feature these days (MOVE_MOUNT_BENEATH) that<br>
allows us to atomically replace mounts. This is still not hooked up to<br>
systemd-sysext however, but we really should.<br>
<br>
With that we can add, remove, change sysexts during runtime with<br>
minimal impact: apps will only see the old set of sysexts or the new<br>
set of sysexts but never an intermediary state where the old sysexts<br>
are gone but the new ones not yet attached.<br>
<br>
> While on the topic, we have investigated other file systems. One we<br>
> put our attention to is mergerfs, which is a fuse file system to<br>
> allows "mount points" to be dynamically added/removed without doing<br>
> a mount/unmount. Is there support in systemd extensions to let<br>
> system extension work with other file systems than overlayfs?<br>
<br>
No, overlayfs is good enough and it is the only one that is in the<br>
kernel and hence efficient enough with acceptable semantics. All that<br>
other stuff is typically implemented in userspace with fuse and that's<br>
generally OK as a toy, but not really something we'd want to deploy.<br>
<br>
MOVE_MOUNT_BENEATH should be the ideal way out though. We just need<br>
someone to sit down a bit and actually make use of it.<br>
<br>
(Interestingly, the ExtensionImages= support in service units actually<br>
*does* suppport MOVE_MOUNT_BENEATH already, it's only the system-wide<br>
concept that doesn't. And we really should change that.)<br>
<br>
Lennart<br>
<br>
--<br>
Lennart Poettering, Berlin<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>