[systemd-devel] How to create minimal portable services environments?

Wojtek Swiatek w at swtk.info
Wed Aug 29 10:24:08 UTC 2018


Hello everyone,

v239 brought in portable services (a good description is at
http://0pointer.net/blog/walkthrough-for-portable-services.html) and while
I still cannot make it work (I do not have a /usr/lib/systemd/portablectl
despite having systemd --version reporting 239, but this is going to be a
separate question) I wanted to understand how to build a minimal portable
service.

A practical example could be dnsmasq. It is provided as a package and
depends (apt show dnsmasq) on netbase, dnsmasq-base, init-system-helpers
(>= 1.18~), lsb-base (>= 3.0-6). These packages may further depend on
something else.
It also brings in a set of files into the system:

root at srv ~# dpkg-query -L dnsmasq
/.
/etc
/etc/default
/etc/default/dnsmasq
/etc/dnsmasq.conf
/etc/dnsmasq.d
/etc/dnsmasq.d/README
/etc/init.d
/etc/init.d/dnsmasq
/etc/insserv.conf.d
/etc/insserv.conf.d/dnsmasq
/etc/resolvconf
/etc/resolvconf/update.d
/etc/resolvconf/update.d/dnsmasq
/lib
/lib/systemd
/lib/systemd/system
/lib/systemd/system/dnsmasq.service
/usr
/usr/lib
/usr/lib/resolvconf
/usr/lib/resolvconf/dpkg-event.d
/usr/lib/resolvconf/dpkg-event.d/dnsmasq
/usr/share
/usr/share/dnsmasq
/usr/share/dnsmasq/installed-marker
/usr/share/doc
/usr/share/doc/dnsmasq

Some of these are existing directories, some new ones and then  there are
files (new, but possibly existing as well).

*How should I create a filesystem which has only the files required by the
packages (= the ones it brings in, as well as all the dependencies)?*

I know that I can dbootstrap a new system and install there dnsmasq - and
then hopefully use this as the tree to be attached via portablectl. This
however means that I do not have a "dnsmasq" portable service but rather a
"bionic install with dnsmasq installed on top". The main reason for me to
use portable service is to create small packages which encompass my
service, to be mounted on a more or less base core OS install (say, minimal
bionic). This would allow to get rid of several nspawn containers which do
exactly this (base OS + a package installed on top).

One of the ideas I had (but which seems very wrong) is to have a copy of
the core OS, then in another copy install the required packages, and then
make a diff of the two directories. But this looks horrible and is hardly
maintainable.

I would very much  appreciate any pointers or hints on how to approach this.

Wojtek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20180829/39362d94/attachment.html>


More information about the systemd-devel mailing list