Subject: Re: Alternatives system for pkgsrc
To: Todd Vierling <tv@duh.org>
From: Julio M. Merino Vidal <jmmv84@gmail.com>
List: tech-pkg
Date: 01/20/2005 19:02:17
Well, in fact... the more I think about wrappers, the more I like the
idea. We loose the ability to link to manual pages (I'd not rather
mix wrappers and links for consistency), but I think there is a simple
solution:
We can bundle a template manual page with the package. Then, when a
new wrapper is installed, we generate a manual page on the fly based
on the generic one (basically, filling gaps) that explains that the
manual page corresponds to a generic wrapper. It'd also have to
tell the user how to determine which program the wrapper is pointing to
(basically "wrappers status <program>") so that he knows which real
manual page to look at.
Another advantage that you outline is the ability to make them point
easily to out-of-prefix stuff.
This could even simplify dramatically the changes I've had to do in the
Java packages to make this work (changes that I don't like very much).
Buuut, this framework could be useless to manage anything other than
manual pages and programs. Anyway, this was the initial plan, so not
a real problem.
How does this sound? :)
Cheers,
On Thu, 2005-01-20 at 11:11 -0500, Todd Vierling wrote:
> On Thu, 20 Jan 2005, Julio M. Merino Vidal wrote:
>
> > > : Also note that the links go this way: /usr/pkg/bin/vi -> sysconfdir/vi
> > > : -> /usr/pkg/bin/nvi.
> > >
> > > I would prefer collecting all alternatives under one subdirectory of
> > > sysconfdir (such as sysconfdir/alternatives). Also, simply using the
> > > basename of the file as the name of the symlink under sysconfdir might
> > > lead to conflicts.
> >
> > Yes well, sorry for the terminology. When I wrote sysconfdir, I was
> > referring to PKG_SYSCONFDIR, which is PKG_SYSCONFBASE/PKG_SYSCONFSUBDIR,
> > and the actual value for the subdir part is 'alternatives'.
>
> And there's the basename issue. Should all alternatives be in "bin"? :)
>
> Perhaps the alternatives should be hierarchical. For example, for "vi",
> have the class name be "bin/vi", the alternative redirect link be
> PKG_SYSCONFDIR/bin/vi, then linking to the appropriate choice.
>
> > I only see a solution to this, which is to use wrappers instead of
> > links. This way, the wrapper might check if the expected program
> > is available, and fall back to another one in case it's not.
> > Dunno if it's worth the effort.
>
> Actually, I would like the idea of wrappers. This would also avoid any
> possible problems with programs that change behavior based on argv[0].
>
> You could have something like this:
>
> bin/vi -> alternatives wrapper script with class name substituted in by sed
> (NOT using $0 to get class name, so that users can symlink to the wrapper)
>
> PKG_SYSCONFDIR/bin/vi -> not a script, but rather a config file for the
> alternatives wrapper listing possible alternatives, in preference order
> (with optional "emulate this program" arguments), e.g.:
>
> /usr/pkg/bin/vim
> /usr/pkg/bin/nvi
> /usr/pkg/bin/emacs -l vip
>
> This config file could be updated automagically by logic added to the
> pkginstall script framework, adding newly installed packages to the end
> without regard to ordering. It would then be up to the admin to reorder the
> file as s/he sees fit (or even add commands not in LOCALBASE!).
>
> The wrapper would then read the config file line by line, using the first
> one it finds as executable. Then exec it with proper args, and voila.
>
--
Julio M. Merino Vidal <jmmv84@gmail.com>
http://www.livejournal.com/users/jmmv/
The NetBSD Project - http://www.NetBSD.org/