OpenBSD Journal

c2k15: jasper@ on puppet progress, sed(1) enhancements and more

Contributed by pitrh on from the puppets in their place dept.

This just in - a fresh hackathon report, this time from Jasper Lievisse Adriaanse (jasper@). Jasper writes,

It seems to have become a standard part of my hackathons these days: Puppet. While I didn't work that much on Puppet itself this hackathon, I did spend a great deal of time before and at the hackathon on Facter. Facter is a tool used by Puppet to gather various bits of system information (facts). These can be trivial facts such as hostname and architecture, but also more complex and structured facts such as mountpoints and network interface information.

Let's briefly take one step back; the version of Puppet we currently have in OpenBSD is Puppet 3.x, using Facter 2.x. All is written in Ruby and all is well.

The next major version of Facter dropped Ruby and has been completely rewritten using C++11 and Boost. While this does make Facter run-time faster, it makes adding new facts almost prohibitively complicated. Previously one would add a new Ruby method which at most would be a dozen lines long if it was a complicated fact to resolve. Now one needs to walk the twisty path of C++ inheritance, wait many moons for builds to compile. Before I could even start to work on Facter I had to update Boost which was committed shortly before the hackathon. After figuring out the right structure to add new OpenBSD "resolvers" I ended up writing the memory, processor, file-system, virtualization, DMI and networking resolvers. Some of these have since been merged upstream.

While I also started to merge our Puppet patches into a new Puppet 4 port, it's far from working right now and needs a lot more work (including PuppetDB and PuppetServer).

Aside from playing with Puppet, I added the "in-place editing" option (-i) to our sed(1). While not a standards-dictated flag it is assumed to be present by many, many scripts in the ports tree. After merging FreeBSD's implementation into ours I started cleaning up the workarounds we have ports for our lack of this option. Also, the 'perl -pi -e' calls are slowly being converted to 'sed -i'. While the speed difference is not noticeable on a fast machine, it does save us from loading libperl and a bunch of others just to do a simple in-place edit. So slower architectures/machines may actually notice a small improvement here.

I also spend some time tame(2)-ing several userland applications, and reworking the octeon/iobus(4) autoconfiguration.

Thanks to nayden@ and the Foundation for this great hackathon at SAIT!

Thanks for all the work on important tools and for the report, Jasper!

(Comments are closed)

  1. By Just Another OpenBSD User ( on

    Thank you for the report and everything even more the in place edits in sed, always thought venerable and widely adopted tools could still get new sane ideas.


Copyright © - Daniel Hartmeier. All rights reserved. Articles and comments are copyright their respective authors, submission implies license to publish on this web site. Contents of the archive prior to as well as images and HTML templates were copied from the fabulous original with Jose's and Jim's kind permission. This journal runs as CGI with httpd(8) on OpenBSD, the source code is BSD licensed. undeadly \Un*dead"ly\, a. Not subject to death; immortal. [Obs.]