tech-pkg archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Apache should never be a mandatory dependency



On Sun, May 18, 2014 at 08:52:13AM +0100, Jonathan Perkin wrote:
> * On 2014-05-18 at 05:06 BST, Alistair Crooks wrote:
> 
> > What I would suggest is a "generic" style of package, let's call it
> > 
> >     pkgsrc/metapackages/webserver
> > 
> > It's not just webservers this can be used for - I can think of editors
> > (and, within editors, sub classes of vi, emacs and other packages),
> > browsers, versions of scheme, common lisp, shells, etc.
> > 
> > Anyway, to get back to the worked example - this will make sure a
> > webserver is installed.  It can take preferences from a setting in
> > /etc/mk.conf (on a per-platform basis), of the form
> > 
> >     GENERIC.webserver=      apache22
> > 
> > If no preference is given at package installation time, it will select
> > the default one for you.
> > 
> > So the line in the webserver pkgsrc entry Makefile would look like:
> > 
> >     .include "../../mk/bsd.prefs.mk"
> > 
> >     .if defined(GENERIC.webserver)
> >     _WEBSERVER=${GENERIC.webserver}
> >     .else
> >     _WEBSERVER=${_DEFAULT_GENERIC_WEBSERVER}
> >     .endif
> > 
> >     DEPENDS+=       
> > {bozohttpd>=20140201,apache22>=2.2.27,apache24>=2.4.9,nginx>=1.6.0}:../../www/${DEFAULT_GENERIC_WEBSERVER}
> > 
> > Seems simple to me, and, in lieu of any other mechanism within pkgsrc,
> > should work. I'm less chuffed with the version numbers there, but I
> > wonder if there's some way to generalise them.
> 
> We use this type of mechanism at Joyent to support all the various
> MySQL forks we've added.  It's ... not great.
> 
> Users regularly get confused because some random package happens to
> need to pull in a MySQL client library, and due to the DEPENDS
> matching will pull in the first match, which is often not what they
> want to use.  When they come later to install their preferred MySQL
> server, they can't due to conflicts, and have to unwind the
> installation back so that they start with their preferred version.
> 
> This is somewhat unavoidable due to hard dependencies on
> libmysqlclient, which changes version between forks, so currently is a
> necessity we have to put up with (and we produce specific images to
> make it easier for users to pick their preferred option).
> 
> When the dependency is soft, like with a web server, then I would
> definitely not want any of this getting in the way.  If people really
> want it regardless, that's fine, but please can we have a global knob
> to turn it off completely to save us having more diffs.
> 
> We're working to remove dependencies to make packages more flexible,
> rather than the other way around.

[Previous message left for context, as I've left this far too long to
reply to - agc]

Thanks for the insight - I can see that this would be a problem with
a real package with a library in it, but for indirecting through a
meta-package, I'm not sure the case is quite so similar.

And so onto plan B.

Second suggestion, then, is to create some form of lightweight
package for the indirection, like, say, a site-specific symbolic
link which can be made (again through a mk.conf setting), and the
"make package" command. e.g.

in /etc/mk.conf

        # strict version numbers would be a lose here
        PKG_GENERIC.webserver= apache

and use the "webserver" keyword in nginx, apache, bozohttpd, lighthttpd,
et al pkgsrc Makefiles:

        PKG_GENERIC.category= webserver

which would create a webserver-0.0.tgz binary package when the
desired binary package was built.

Yes, I know this is subclassing the existing categories, but it seems
useful to me to have such a mechanism.  Depending on a generic and
abstract webserver-0.0 package would trigger the build mechanism
(by checking whther PKG_GENERIC.${PKG_GENERIC.category} was defined).

It's possible to change the desired specific package by using a
different value in /etc/mk.conf.  Failure to flush out the old one
would have the same results.

Whatever way this is done, it needs another layer of indirection (with
a tip of the hat to Butler Lampson/David Wheeler).  I'm sure people
can improve on my rather handwavy explanations above.

Regards,
Alistair


Home | Main Index | Thread Index | Old Index