rubygem-facter versus sysutils/facter

Dan Mahoney (Gushi) freebsd at
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 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?




--------Dan Mahoney--------
Techie,  Sysadmin,  WebGeek

More information about the freebsd-ports mailing list