rubygem-facter versus sysutils/facter
Dan Mahoney (Gushi)
freebsd at gushi.org
Tue Feb 6 01:50:22 UTC 2018
I've lost the better part of an afternoon to this issue. These questions
are not just specific to the above ports, but also as to how ports are
best built in general.
The puppet ports require rubygem-facter. There's a knob in the port that
lets you switch to sysutils/facter, which is more modern and written in C.
Rubygem-facter is based on facter 2, which is EOL as of 2016. The
new-style puppet facts are now including more and more information that's
not available in rubygem-facter, and it means that the "Fact"
documentation on puppet.org doesn't at all match what you currently get on
FreeBSD, even with a modern puppet.
The ruby folks have been trying to make a modern rubygem-version for
years, but there's no real progress:
Having to build a custom port of Puppet on every machine (which would mean
building ruby from scratch) is annoying as heck, and while I have my own
poudriere install and build repos, it's *puppet* that places those on my
production machines, so I'm looking for a bootstrapping method that "just
works" as simply as 'pkg install puppet4' does.
1) In the port's Makefile, these are listed as build-time dependencies,
and I don't think they are -- I think the ruby code will just find
whatever facter exists at runtime, which begs the rest of these questions.
2) As a ports maintainer, it would be nice if there was a way to have
either the rubygem-facter, or the core facter, satisfy this dependency. I
know you can do this somewhat with ports, by adding something like:
But I'm not sure if it survives through to the pkg dependency tree.
It would seem possible for dependency *binaries*, but not for packages.
I.e. I can make it so a port is happy if there's a binary in the path
called "facter", but *not* if I want to specify a version. Is this set in
stone? Is there no way to say "RUN DEPENDS=(<= this version of
rubygem-facter OR <= this version of sysutils/facter)
3) It would be nice if rubygem-facter and mainline facter could exist so I
can compare their output without uninstalling/reinstalling puppet.
In search of #3, I can't figure out how to get pkg to not outsmart me.
I.e. "install facter, but don't deinstall puppet", or "install facter but
don't deinstall rubygem-facter". It seems the only actual file they
conflict on is /usr/local/bin/facter, and I can manage that with symlinks.
Is there a way to force it?
Techie, Sysadmin, WebGeek
More information about the freebsd-ports