Using PKGNG on FreeBSD with Puppet
This is how I installed the new package manager on FreeBSD : pkgng and how to use it with Puppet.
This has been tested on a FreeBSD 8.3 jail with Puppet 3.2.
Pkgng setup
The official documentation is here.
Pkgng installation:
# portsnap fetch update # portmaster -dB ports-mgmt/pkg
You need then to convert your package database to new pkgng format. Warning ! As mentioned in documentation, this step is not reversible. You won’t be able to use pkg_add anymore after that.
# pkg2ng
To use pkgng format by default, you must add in your make.conf:
# echo "WITH_PKGNG=yes" >> /etc/make.conf
Define new repository for pkgng:
# mkdir -p /usr/local/etc/pkg/repos # cat /usr/local/etc/pkg/repos/FreeBSD.conf FreeBSD: { url: "http://pkg.FreeBSD.org/${ABI}/latest", mirror_type: "srv", enabled: "yes" } EOF # pkg update
That’s it, you should be able to use pkgng:
# pkg update # pkg install sl # This is my favorite test package! # sl
pkg may display an error message (only warning):
pkg: Invalid configuration format, ignoring the configuration file
This is a known bug related to the empty /usr/local/etc/pkg.conf file.
pkg 1.2 should fix this problem.
Add pkgng as package provider in Puppet
The new provider already exists in Puppet.
You can find the github repository here.
To install the module, you can clone the repo or use puppet module install:
# cd ~puppet/modules/ # puppet module install xaque208/pkgng
I personaly don’t use the module’s manifest (init.pp and params.pp), I only use the new package provider defined in lib directory.
You now have to change the default provider for FreeBSD on Puppet. I did it on site.pp:
if $::operatingsystem == 'FreeBSD' { Package { provider => $::operatingsystem ? { FreeBSD => pkgng } } }
You can now define package resource on Puppet, they will be installed by pkgng !
package { 'sl': #ensure => installed; ensure => absent; }