There are a number of sites with information about installing Puppet on Solaris. They each contain slightly different instructions which get you most of the way there. With a little finesse it’s not hard to follow the instructions and get things working. This post includes yet another set of instructions for installing Puppet and getting things running. Hopefully with these instructions and others as reference your installation goes smoothly.
For those who are unfamiliar with Puppet, it is a tool for automating system administration. It is built and supported by Reductive Labs. They describe Puppet as a declarative language for expressing system configuration, a client and server for distributing it, and a library for realizing the configuration. Rather than a system administrator having to follow procedures, run scripts and configure things by hand, Puppet enables defining a configuration and automatically applies it to specified servers and then maintains it. Puppet can be downloaded for many of the most popular operating systems. There is a download page with links to some installation instructions.
Installation on Solaris
1. To make installation more automated, install the Solaris package pkg-get. This tool simplifies getting the latest version of packages from a known site. A copy can be found at Blastwave.
download http://www.blastwave.org/pkg_get.pkg to /tmp
Make sure the installation is done with root privilege. su to root.
run the following command from the /tmp directory
# pkgadd -d pkg_get.pkg
The package can also be added using the following command
#pkgadd -d http://www.opencsw.org/pkg_get.pkg
2) Verify that the pkg-get configuration file is configured for your region. In this case in the U.S. Change the default download site in the configuration file /opt/csw/etc/pkg-get.conf to:
3) Add some new directories to your path. pkg-get, wget and gpg are installed in /opt/csw/bin.
# export PATH=/opt/csw/bin:/opt/csw/sbin:/usr/local/bin:$PATH
4) Install the complete wget package. wget is a tool GNU tool used to download and install packages from the web. This is a very useful tool to automate installs and software updates. This tool will be used by pkg-get.
# pkg-get -i wget
If you haven’t installed the entire Solaris OS, the pkg-get may fail to install wget, with the error:
“no working version of wget found, in PATH”
This is probably due to missing SUNWwgetr and SUNWwgetu packages. Install them by inserting an installation DVD disk into the DVDROM and mount it to /media/xxxx
Install the Solaris packages
# pkgadd -d . SUNWwgetr
# pkgadd -d . SUNWwgetu
5) Configure pkg-get to support automation.
# cp -p /var/pkg-get/admin-fullauto /var/pkg-get/admin
6) Install gnupg and an md5 utility so security validation of Blastwave packages can be done.
# pkg-get -i gnupg textutils
You may also need to define $LD_LIBRARY_PATH to /usr/sfw/lib to find needed libraries.
7) Copy the Blastwave PGP public key to the local host.
# wget –output-document=pgp.key http://www.blastwave.org/mirrors.html
8) Import pgp key
# gpg –import pgp.key
9) Verify that the following two lines in /opt/csw/etc/pkg-get.conf are COMMENTED OUT.
10) Puppet is build with Ruby. Install the Ruby software (CSWruby) from Blastwave.
# pkg-get -i ruby
11) Install the Ruby Gems software (CSWrubygems) from Blastwave.
# pkg-get -i rubygems
12) Update to the latest versions and install a the gems used by Puppet
# gem update –system
# gem install facter
# gem install puppet –version ‘0.24.7’
or current version. The gem update command can also be used to update the software.
# gem update puppet
13) Create the puppet user and group:
Info to add in /etc/passwd: puppet:x:35001:35001:puppet user:/home/puppet:/bin/sh
Info to add in /etc/shadow: puppet:LK:::::::
Info to add in /etc/group: puppet::35001:
14) Create the following core directories and set the permissions:
# mkdir -p /sysprov/dist/apps /sysprov/runtime/puppet/prod/puppet/master
# chown -R puppet:puppet /sysprov/dist /sysprov/runtime
15) add puppet configuration definitions in /etc/puppet/puppet.conf. The initial content using your own puppetmaster hostname should be:
server = myserver.mycompany.com
report = true
16) Repeat this process for the servers which will run Puppet. At least 2 should be set up. One will be the Master Puppet server, the other a Puppet client server that will be managed.
Validating the Installation and Configuring Secure Connections
To verify that the Puppet installation is working as expected, pick a single client to used as a testbed. With Puppet installed on that machine, run a single client against the central server to verify that everything is working correctly.
Start the master puppet daemon on the server defined in puppet.conf files.
# puppetmasterd –debug
Start the first client in verbose mode, with the –waitforcert flag enabled. The default server name for puppetd is Puppet. Use the server flag and define the server name running puppetmasterd. Later the server hostname can be added to the configuration file.
# puppetd –server myserver.mycompany.com –waitforcert 60 –test
Adding the –test flag causes puppetd to stay in the foreground, print extra output, only run once and then exit, and to just exit if the remote configuration fails to compile (by default, puppetd will use a cached configuration if there is a problem with the remote manifests).
Running the client should produce a message like:
info: Requesting certificate
warning: peer certificate won’t be verified in this SSL session
notice: Did not receive certificate
This message will repeat every 60 seconds with the above command. This is normal, since your server is not initially set up to auto-sign certificates as a security precaution. On your server running puppetmasterd, list the waiting certificates:
# puppetca –list
You should see the name of the test client. Now go ahead and sign the certificate:
# puppetca –sign myserver.mycompany.com
The test client should receive its certificate from the server, receive its configuration, apply it locally, and exit normally.
By default, puppetd runs with a waitforcert of five minutes; set the value to the desired number of seconds or to 0 to disable it entirely.
Getting this far, you now have puppet installed with a base initial configuration and secure connections defined between a Puppet master server and one puppet client server. At this point you can start defining manifests for desired server configurations.
There are various sample recipes and manifest to start working with. Viewing and editing some of thes is a good place to start learning how to create configuration defintions. If there is interest I can share sample as well if I have one that may be useful for your needs.