CFT: FreeBSD Package Base

kris at ixsystems.com kris at ixsystems.com
Tue Apr 30 14:17:46 UTC 2019


> -----Original Message-----
> From: David Chisnall <theraven at FreeBSD.org>
> Sent: Tuesday, April 30, 2019 4:23 AM
> To: Joe Maloney <jmaloney at ixsystems.com>; Cy Schubert
> <Cy.Schubert at cschubert.com>
> Cc: Rodney W. Grimes <freebsd-rwg at gndrsh.dnsmgr.net>; Kris Moore
> <kris at ixsystems.com>; FreeBSD Stable <freebsd-stable at freebsd.org>;
> freebsd-ports at freebsd.org; Goran Mekić <meka at tilda.center>; freebsd-
> hackers at freebsd.org; FreeBSD Current <freebsd-current at freebsd.org>;
> freebsd-pkgbase at freebsd.org; freebsd-pkg at freebsd.org; Emmanuel Vadot
> <manu at bidouilliste.com>
> Subject: Re: CFT: FreeBSD Package Base
> 
> On 29/04/2019 21:12, Joe Maloney wrote:
> > With CFT version you chose to build, and package individual components
> such as sendmail with a port option.  That does entirely solve the problem of
> being able to reinstall sendmail after the fact without a rebuild of the
> userland (base) port but perhaps base flavors could solve that problem
> assuming flavors could extend beyond python.
> 
> This sounds very much like local optimisation. It's now easy to create a
> custom base image.  Great.  But how do I express dependencies in ports on a
> specific base configuration? This is easy if I depend on a specific base
> package, but how does this work in your model?  For example, if I have a
> package that depends on a library that is an optional part of the base system,
> how do I express that pkg needs to either refuse to install it, or install a
> userland pkg that includes that library in place of my existing version as part
> of the install process?
> 
> More importantly for the container use case, if I want to take a completely
> empty jail and do pkg ins nginx (for example), what does the maintainer of
> the nginx port need to do to express the minimum set of the base system
> that needs to be installed to allow nginx to work?
> 
> One of the goals for the pkg base concept was to allow this kind of use case,
> easily creating a minimal environment required to run a single service. With a
> monolithic base package set, you're going to need some mechanism other
> than packages to express the specific base subset package that you need and
> I think that you need to justify why this mechanism is better than using small
> individual packages.
> 
> David


<Trimmed some of the other lists from reply>

Yes, this is the next logical step of this package base effort. We'd like to build out the port framework to do proper flavors of some of the most common base configurations. We did this last week to allow having both Debug/NonDebug kernels available via pkg, next step would be to extend that to the base system itself, so you could have a variety of configs represented as flavors, including minimal.

The way we'll be able to interject depends on ports is going to be through our usage of "userland" as a meta-package. That meta-package depends on userland-base (The traditional FreeBSD world contents). However it currently has options to depend on sysutils/zol, pairing that with a userland-base that is compiled without ZFS. Fleshing that out should be fairly straight forward, but we wanted to get some hands-on testing and feedback on the current work before going down that route. 

Ideally we extend some of the flavors support that already exists in Ports for Python 2/3 with base as well and it avoids us having to brute-force it with tons of dummy ports with different flag combinations. This would give you the ability to 'pkg install userland-minimal' or whatever name, and more importantly your ports could have depends on those particular flavors as well. I.E. some port needs SSL in base, or firewall, etc, etc. 




-- 
Kris Moore
Vice President of Engineering
iXsystems, Inc
Ph: (408) 943-4100
Ph: (408) 943-4101
The Groundbreaking TrueNAS M-Series -
Enterprise Storage & Servers Driven By Open Source




More information about the freebsd-pkgbase mailing list