On Wed, Apr 29, 2020 at 11:10:41AM +0200, Andrea Bolognani wrote:
On Tue, 2020-03-31 at 15:28 +0100, Daniel P. Berrangé wrote:
> Currently when creating a Dockerfile for a container, we include the
> full set of base packages, along with the packages for the project
> itself. If building a Perl binding, this would require us to install
> the base package, libvirt packages and Perl packages. With the use
> of the "--inherit libvirt-fedora-30" arg, it is possible to have a
> dockerfile that only adds the Perl packages, getting everything
> else from the parent image.
>
> For example, a full Dockerfile for libvirt-go would thus be:
>
> FROM libvirt-centos-7:latest
>
> RUN yum install -y \
> golang && \
> yum autoremove -y && \
> yum clean all -y
>
> Note there is no need to set ENV either, as that's inherited from the
> parent container.
I marked this for review and then kept forgetting to get around to
it, sorry!
I like the idea of reusing existing images, as the layering would
result in significant savings when it comes to disk space and fetch
times.
However, as we discussed in the past, there are two possible
scenarios for subprojects such as libvirt-go:
* include dependencies for both libvirt and libvirt-go, then build
both projects in the resulting container;
* include dependencies for libvirt-go along with distro-provided
packages for libvirt, and only build libvirt-go.
This would cover the former case, but not the latter one. And, if I
remember correctly, libvirt-go was one of the projects that would
benefit more from the latter, because it's supposed to be buildable
against various versions of libvirt.
So what I think we need is an additional flag that can be used to
choose one of the two possible behaviors. This wouldn't be limited
to the Dockerfile generator, since (unlike inheritance) it can apply
also to VM management.
I think this problem is tangential to container inheritance and so
doesn't need to be dealt with here.
Instead, it should be solved by simply defining another project
"libvirt-devel", or "libvirt-dist" which pulls in the pre-built
distro packages for libvirt.
As an additional point, we really need to figure out a good way to
store dependencies between projects into lcitool itself, so that you
can tell it that you're interested in building eg. libosinfo and it
will automatically take care of making osinfo-db-tools and osinfo-db
available to you, either by installing the binary packages or their
build dependencies. This is not a strict requirement for container
inheritance, I think, but the more we go on the more this limitation
is becoming painful.
I'm not really experiencing this as a painpoint from the container CI
side.
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|