On Tue, Jun 25, 2024 at 7:13 AM Helmut Grohne <hel...@subdivi.de> wrote:
>
> Hi,
>
> sbuild is our primary tool for constructing a build environment to build
> Debian packages. It is used on all buildds and for a long time, the
> backend used with sbuild has always been schroot. More recently, a
> number of buildds have been moved away from schroot towards
> --chroot-mode=unshare thanks to the work of at least Aurelien Jarno and
> Jochen Sprickerhof and a few more working more behind the scenes for me
> to spot them directly.
>
> In this work, limitations with --chroot-mode=unshare became apparent and
> that lead to Johannes, Jochen and me sitting down in Berlin pondering
> ideas on how to improve the situation. That is a longer story, but
> eventually Timo Röhling asked the innocuous question of why we cannot
> just use schroot and make it work with namespaces.
>
> That lead me to sit down and write a proof of concept. As a result, we
> now have a little script called unschroot.py that vaguely can be used as
> a drop-in replacement for schroot when used with sbuild. In trixie and
> bookworm-backports it can now be plugged into sbuild by setting $schroot
> = "path/to/unschroot.py" thanks to Johannes. It's not that long and can
> be viewed at
> https://git.subdivi.de/~helmut/python-linuxnamespaces.git/tree/examples/unschroot.py.
> It is vaguely close to reaching feature-parity with sbuild
> --chroot-mode=unshare and operates in a very similar way. As it is now,
> it doesn't bring us any benefits beyond separating the containment
> aspect from the build aspect into different tools.
>
> The split into different tools is important in my view. I argue that it
> allows easier experimentation and its architecture may enable features
> that were difficult to implement using sbuild --chroot-mode=unshare as
> sbuild is significantly becoming a container runtime of its own and
> there things start to get messy.
>
> Is this a path worth pursuing further? Would we actually consider moving
> back from sbuild --chroot-mode=unshare to sbuild --chroot-mode=schroot
> with a different schroot implementation?
>
> Related to that, what would be compelling features to switch?
>
> Let me go a bit further into detail. There are two approaches to
> managing an ephemeral build container using namespaces. In one approach,
> we create a directory hierarchy of a container root filesystem and for
> each command and hook that we invoke there, we create new namespaces on
> demand. In particular, there are no background processes when nothing is
> running in that container and all that remains is its directory
> hierarchy. Such a container session can easily survive a reboot (unless
> stored on tmpfs). Both sbuild --chroot-mode=unshare and unschroot.py
> follow this approach. For comparison, schroot sets up mounts (e.g /proc)
> when it begins a session and cleans them up when it ends. No such
> persistent mounts exist in either sbuild --chroot-mode=unshare or
> unschroot.py.
>
> The other approach is using one set of namespaces for the entire
> session. Practically, this implies having a background process keeping
> this namespace alive for the duration of the session and talking to it
> via some IPC mechanism. We may still spawn a new pid namespace for each
> command to get reliable process cleanup, but the use of a persistent
> mount namespace enables the use of fuse2fs, squashfuse, overlayfs and
> bindfs to construct the root directory of the container by other means
> than unpacking a tar into a directory. In particular, the use of bindfs
> allows sharing e.g. the user's ccache with the build container in
> principle (with proper id shifting). At the time of this writing, this
> second approach is wishful thinking and not implemented at all. I merely
> believe that it is implementable with the schroot API already
> implemented by unschroot.py above.
>
> Another possible extension is a hooking mechanism. Regular schroot has
> hooks already and I've seen requests for sbuild to use package-specific
> chroots. For instance, one may have a separate Haskell or Rust container
> that already has a basic set of ecosystem-specific dependencies to speed
> up the installation of Build-Depends. On-demand updating chroots also
> have been requested. However, it's not clear to me what a useful
> interface e.g. unschroot.py could provide for such hooking yet and I
> invite you to provide more use cases for such hooking. Also sketching
> how you imagine interfacing with this would be helpful. For instance,
> you may explain what kind of configuration files or options you'd like
> to use and how you imagine them to work.
>
> I note that this is not a promise that I am going to implement your
> wishes. I intend to do more work on this and barring really useful
> extensions, my next goal would be moving to that other approach.
>
> Please allow me to thank Freexian for supporting part of this work
> financially even though it has been my initiative and is not otherwise
> influenced by Freexian at the time of this writing.
>
> Let me also explain the relation between "unschroot.py" and the
> containing repository "python-linuxnamespaces". linuxnamespaces is a
> (probably) distribution-agnostic Python module providing plumbing
> functions for constructing container runtimes written by myself for lack
> of better alternatives. As such unschroot.py in large parts uses
> linuxnamespaces (the Python module) to plug together the various parts
> needed to arrive at a container useful for building with sbuild. If
> unschroot takes off, it likely needs to get its own home.
> linuxnamespaces is supposed to enable constructing a systemd-as-pid-1
> container as a regular user, but doesn't do that as of yet. While podman
> and docker allow running unprivileged application containers, they still
> require privileged containers when you want to run systemd-as-pid-1.
>
> Helmut
>

I use schroot to help me manage my chroots both for sbuild and the
ones I create when needed. A very useful tool for this purpose, as
well as allowing me to access it using the chroot name.
I've been doing this for years.

-- 
Cheers,
Leandro Cunha

Reply via email to