On Mac OS X:
- Install puppet 3.0.2, facter 1.6.17 and hiera 1.1.2
- create /etc/puppet/puppet.conf
- configure launchd puppet daemon
- initial puppet run
| #!/usr/bin/env bash | |
| set -o errtrace | |
| set -o errexit | |
| facter_version=1.6.17 | |
| puppet_version=3.0.2 | |
| hiera_version=1.1.2 | |
| target_volume=/Volumes/Macintosh\ HD | |
| echo "About to install Facter $facter_version and Puppet $puppet_version on target volume $target_volume" | |
| start_date=$(date "+%Y-%m-%d%:%H:%M:%S") | |
| echo "mkdir /private/tmp/$start_date ; cd /private/tmp/$start_date" | |
| mkdir /private/tmp/$start_date ; cd /private/tmp/$start_date | |
| curl -sO http://downloads.puppetlabs.com/mac/facter-$facter_version.dmg | |
| curl -sO http://downloads.puppetlabs.com/mac/hiera-$hiera_version.dmg | |
| curl -sO http://downloads.puppetlabs.com/mac/puppet-$puppet_version.dmg | |
| hdiutil attach facter-$facter_version.dmg | |
| hdiutil attach hiera-$hiera_version.dmg | |
| hdiutil attach puppet-$puppet_version.dmg | |
| sudo installer -package /Volumes/facter-$facter_version/facter-$facter_version.pkg -target "$target_volume" | |
| sudo installer -package /Volumes/hiera-$hiera_version/hiera-$hiera_version.pkg -target "$target_volume" | |
| sudo installer -package /Volumes/puppet-$puppet_version/puppet-$puppet_version.pkg -target "$target_volume" | |
| echo "Creating directories in /var and /etc - needs sudo" | |
| sudo mkdir -p /var/lib/puppet | |
| sudo mkdir -p /etc/puppet/manifests | |
| sudo mkdir -p /etc/puppet/ssl | |
| if [ $(dscl . -list /Groups | grep puppet | wc -l) = 0 ]; then | |
| echo "Creating a puppet group - needs sudo" | |
| max_gid=$(dscl . -list /Groups gid | awk '{print $2}' | sort -ug | tail -1) | |
| new_gid=$((max_gid+1)) | |
| sudo dscl . create /Groups/puppet | |
| sudo dscl . create /Groups/puppet gid $new_gid | |
| fi | |
| if [ $(dscl . -list /Users | grep puppet | wc -l) = 0 ]; then | |
| echo "Creating a puppet user - needs sudo" | |
| max_uid=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ug | tail -1) | |
| new_uid=$((max_uid+1)) | |
| sudo dscl . create /Users/puppet | |
| sudo dscl . create /Users/puppet UniqueID $new_uid | |
| sudo dscl . -create /Users/puppet PrimaryGroupID $new_gid | |
| fi | |
| echo "Creating /etc/puppet/puppet.conf - needs sudo" | |
| sudo tee -a /etc/puppet/puppet.conf>/dev/null<<EOF | |
| [main] | |
| vardir = /var/lib/puppet | |
| libdir = $vardir/lib | |
| ssldir = $vardir/ssl | |
| http_compression=true | |
| pluginsync = true | |
| [agent] | |
| certname = `hostname` | |
| EOF | |
| echo "Changing permissions - needs sudo" | |
| sudo chown -R puppet:puppet /var/lib/puppet | |
| sudo chown -R puppet:puppet /etc/puppet | |
| sudo tee -a /Library/LaunchDaemons/com.puppetlabs.puppet.list>/dev/null<<EOF | |
| <?xml version="1.0" encoding="UTF-8"?> | |
| <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
| <plist version="1.0"> | |
| <dict> | |
| <key>EnvironmentVariables</key> | |
| <dict> | |
| <key>PATH</key> | |
| <string>/sbin:/usr/sbin:/bin:/usr/bin</string> | |
| <key>RUBYLIB</key> | |
| <string>/usr/lib/ruby/site_ruby/1.8/</string> | |
| </dict> | |
| <key>Label</key> | |
| <string>com.puppetlabs.puppet</string> | |
| <key>OnDemand</key> | |
| <false/> | |
| <key>ProgramArguments</key> | |
| <array> | |
| <string>/usr/sbin/puppet</string> | |
| <string>agent</string> | |
| <string>apply</string> | |
| <string>--verbose</string> | |
| <string>--listen</string> | |
| <string>--no-daemonize</string> | |
| <string>--logdest</string> | |
| <string>console</string> | |
| </array> | |
| <key>RunAtLoad</key> | |
| <true/> | |
| <key>ServiceDescription</key> | |
| <string>Puppet Daemon</string> | |
| <key>ServiceIPC</key> | |
| <false/> | |
| <key>StandardErrorPath</key> | |
| <string>/var/lib/puppet/log/puppet.err</string> | |
| <key>StandardOutPath</key> | |
| <string>/var/lib/puppet/log/puppet.out</string> | |
| </dict> | |
| </plist> | |
| EOF | |
| echo "Cleaning up" | |
| hdiutil detach /Volumes/facter-$facter_version | |
| hdiutil detach /Volumes/hiera-$hiera_version | |
| hdiutil detach /Volumes/puppet-$puppet_version | |
| cd /private/tmp | |
| rm -rf ./$start_date | |
| sudo puppet agent apply -t --waitforcert 15 | |
| sudo launchctl load /Library/LaunchDaemons/com.puppetlabs.puppet.plist |
Wow! this is great work! Thank you :)