#!/bin/bash
MPATH=” BETCDIR=‘/etc/mcollective’ BRUBYDIR=‘/Library/Ruby/Site/1.8’ BSBINDIR=‘/usr/sbin’ BBINDIR=‘/usr/bin’ BLIBEXECDIR=‘/usr/libexec/mcollective’ BDOCDIR=‘/usr/share/doc/mcollective’ BLAUNCHDIR=‘/Library/LaunchDaemons’
if [ -z $1 ]; then
echo 'Please give the path to the MCollective source directory' exit 1
else
MPATH=$1
fi
function msg_stomp {
echo 'It is recommended to install stomp on this system using ruby gems' exit 2
}
function msg_xcode {
echo 'It is required to have the latest XCode installed' exit 3
}
#Make sure we have stomp so we can load mcollective /usr/bin/ruby <<EOF || msg_stomp require ‘rubygems’ require ‘stomp’ EOF
#Make sure we have PackageMaker installed
|| msg_xcode
#Get the MCollective version export RUBYLIB=$RUBYLIB:$MPATH/lib mcversion=$(/usr/bin/ruby <<EOF require ‘mcollective’ puts MCollective.version EOF )
#Make our tmp directory tmpbase=`basename $0` common_tmpdir=`mktemp -d /tmp/${tmpbase}-common_$mcversion.XXXX` || exit 1 client_tmpdir=`mktemp -d /tmp/${tmpbase}-client_$mcversion.XXXX` || exit 1 tmpdir=`mktemp -d /tmp/${tmpbase}_$mcversion.XXXX` || exit 1
#Build the common environment mkdir -p “$common_tmpdir/$BRUBYDIR” mkdir -p “$common_tmpdir/$BLIBEXECDIR” mkdir -p “$common_tmpdir/$BDOCDIR”
cp -r $MPATH/lib/mcollective $common_tmpdir/$BRUBYDIR/ cp $MPATH/lib/mcollective.rb $common_tmpdir/$BRUBYDIR/ cp -r $MPATH/plugins/mcollective $common_tmpdir/$BLIBEXECDIR/ cp $MPATH/COPYING $common_tmpdir/$BDOCDIR/
#Build the server environment mkdir -p “$tmpdir/$BSBINDIR” mkdir -p “$tmpdir/$BETCDIR” mkdir -p “$tmpdir/$BETCDIR/ssl/clients” mkdir -p “$tmpdir/$BLAUNCHDIR”
cp $MPATH/mcollectived.rb $tmpdir/$BSBINDIR/mcollectived cp $MPATH/etc/facts.yaml.dist $tmpdir/$BETCDIR/facts.yaml cp $MPATH/etc/server.cfg.dist $tmpdir/$BETCDIR/server.cfg #This is needed for macs since launchd will handle the daemonizing perl -i -pe ‘s/daemonize = 1/daemonize = 0/’ $tmpdir/$BETCDIR/server.cfg
#Build the client environment mkdir -p “$client_tmpdir/$BETCDIR” mkdir -p “$client_tmpdir/$BSBINDIR”
cp $MPATH/etc/client.cfg.dist $client_tmpdir/$BETCDIR/client.cfg cp $MPATH/etc/rpc-help.erb $client_tmpdir/$BETCDIR/ cp $MPATH/mc-call-agent $client_tmpdir/$BSBINDIR/ cp $MPATH/mc-controller $client_tmpdir/$BSBINDIR/ cp $MPATH/mc-facts $client_tmpdir/$BSBINDIR/ cp $MPATH/mc-find-hosts $client_tmpdir/$BSBINDIR/ cp $MPATH/mc-inventory $client_tmpdir/$BSBINDIR/ cp $MPATH/mc-ping $client_tmpdir/$BSBINDIR/ cp $MPATH/mc-rpc $client_tmpdir/$BSBINDIR/
#Build our launchd property list file cat - > $tmpdir/$BLAUNCHDIR/org.marionette-collective.mcollective.plist <<EOF <?xml version=“1.0” encoding=“UTF-8”?> <!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “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>/Library/Ruby/Site/1.8</string> </dict> <key>Label</key> <string>org.marionette-collective.mcollective</string> <key>OnDemand</key> <false/> <key>KeepAlive</key> <true/> <key>ProgramArguments</key> <array> <string>/usr/sbin/mcollectived</string> <string>--config=/etc/mcollective/server.cfg</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceDescription</key> <string>MCollective Server</string> <key>ServiceIPC</key> <false/>
</dict> </plist> EOF
launchd complains if the permissions aren’t right chmod 644 $tmpdir/$BLAUNCHDIR/org.marionette-collective.mcollective.plist
#Make our Packages. This requires XCode be installed /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker -r $tmpdir –version $mcversion –title “MCollective” -l / -o MCollective_$mcversion.pkg -i org.marionette-collective.mcollective /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker -r $common_tmpdir –version $mcversion –title “MCollective Common” -l / -o MCollective-Common_$mcversion.pkg -i org.marionette-collective.mcollective-common /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker -r $client_tmpdir –version $mcversion –title “MCollective Client” -l / -o MCollective-Client_$mcversion.pkg -i org.marionette-collective.mcollective-client
#Clean up rm -rf $tmpdir rm -rf $common_tmpdir rm -rf $client_tmpdir