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 :)