Added mcollective 2.3.1 package
[packages/trusty/mcollective.git] / ext / osx / bldmacpkg
1 #!/bin/bash
2
3 MPATH=''
4 BETCDIR='/etc/mcollective'
5 BRUBYDIR='/Library/Ruby/Site/1.8'
6 BSBINDIR='/usr/sbin'
7 BBINDIR='/usr/bin'
8 BLIBEXECDIR='/usr/libexec/mcollective'
9 BDOCDIR='/usr/share/doc/mcollective'
10 BLAUNCHDIR='/Library/LaunchDaemons'
11
12 if [ -z $1 ]; then 
13     echo 'Please give the path to the MCollective source directory'
14     exit 1
15 else
16     MPATH=$1
17 fi
18
19 function msg_stomp {
20     echo 'It is recommended to install stomp on this system using ruby gems'
21     exit 2
22 }
23
24 function msg_xcode {
25     echo 'It is required to have the latest XCode installed'
26     exit 3
27 }
28
29 #Make sure we have stomp so we can load mcollective
30 /usr/bin/ruby <<EOF || msg_stomp
31 require 'rubygems'
32 require 'stomp'
33 EOF
34
35 #Make sure we have PackageMaker installed
36 [ -x /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker ] || msg_xcode
37
38 #Get the MCollective version
39 export RUBYLIB=$RUBYLIB:$MPATH/lib
40 mcversion=$(/usr/bin/ruby <<EOF
41 require 'mcollective'
42 puts MCollective.version
43 EOF
44 )
45
46 #Make our tmp directory
47 tmpbase=`basename $0`
48 common_tmpdir=`mktemp -d /tmp/${tmpbase}-common_$mcversion.XXXX` || exit 1
49 client_tmpdir=`mktemp -d /tmp/${tmpbase}-client_$mcversion.XXXX` || exit 1
50 tmpdir=`mktemp -d /tmp/${tmpbase}_$mcversion.XXXX` || exit 1
51
52 #Build the common environment
53 mkdir -p "$common_tmpdir/$BRUBYDIR"
54 mkdir -p "$common_tmpdir/$BLIBEXECDIR"
55 mkdir -p "$common_tmpdir/$BDOCDIR"
56
57 cp -r $MPATH/lib/mcollective     $common_tmpdir/$BRUBYDIR/
58 cp    $MPATH/lib/mcollective.rb  $common_tmpdir/$BRUBYDIR/
59 cp -r $MPATH/plugins/mcollective $common_tmpdir/$BLIBEXECDIR/
60 cp    $MPATH/COPYING             $common_tmpdir/$BDOCDIR/
61
62 #Build the server environment
63 mkdir -p "$tmpdir/$BSBINDIR"
64 mkdir -p "$tmpdir/$BETCDIR"
65 mkdir -p "$tmpdir/$BETCDIR/ssl/clients"
66 mkdir -p "$tmpdir/$BLAUNCHDIR"
67
68 cp $MPATH/mcollectived.rb     $tmpdir/$BSBINDIR/mcollectived
69 cp $MPATH/etc/facts.yaml.dist $tmpdir/$BETCDIR/facts.yaml
70 cp $MPATH/etc/server.cfg.dist $tmpdir/$BETCDIR/server.cfg
71 #This is needed for macs since launchd will handle the daemonizing
72 perl -i -pe 's/daemonize = 1/daemonize = 0/' $tmpdir/$BETCDIR/server.cfg
73
74 #Build the client environment
75 mkdir -p "$client_tmpdir/$BETCDIR"
76 mkdir -p "$client_tmpdir/$BSBINDIR"
77
78 cp $MPATH/etc/client.cfg.dist $client_tmpdir/$BETCDIR/client.cfg
79 cp $MPATH/etc/rpc-help.erb    $client_tmpdir/$BETCDIR/
80 cp $MPATH/mc-call-agent       $client_tmpdir/$BSBINDIR/
81 cp $MPATH/mc-controller       $client_tmpdir/$BSBINDIR/
82 cp $MPATH/mc-facts            $client_tmpdir/$BSBINDIR/
83 cp $MPATH/mc-find-hosts       $client_tmpdir/$BSBINDIR/
84 cp $MPATH/mc-inventory        $client_tmpdir/$BSBINDIR/
85 cp $MPATH/mc-ping             $client_tmpdir/$BSBINDIR/
86 cp $MPATH/mc-rpc              $client_tmpdir/$BSBINDIR/
87
88 #Build our launchd property list file
89 cat - > $tmpdir/$BLAUNCHDIR/org.marionette-collective.mcollective.plist <<EOF
90 <?xml version="1.0" encoding="UTF-8"?>
91 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
92 <plist version="1.0">
93 <dict>
94         <key>EnvironmentVariables</key>
95         <dict>
96                 <key>PATH</key>
97                 <string>/sbin:/usr/sbin:/bin:/usr/bin</string>
98                 <key>RUBYLIB</key>
99                 <string>/Library/Ruby/Site/1.8</string>
100         </dict>
101         <key>Label</key>
102         <string>org.marionette-collective.mcollective</string>
103         <key>OnDemand</key>
104         <false/>
105         <key>KeepAlive</key>
106         <true/>
107         <key>ProgramArguments</key>
108         <array>
109                 <string>/usr/sbin/mcollectived</string>
110                 <string>--config=/etc/mcollective/server.cfg</string>
111         </array>
112         <key>RunAtLoad</key>
113         <true/>
114         <key>ServiceDescription</key>
115         <string>MCollective Server</string>
116         <key>ServiceIPC</key>
117         <false/>
118 </dict>
119 </plist>
120 EOF
121
122 #launchd complains if the permissions aren't right
123 chmod 644 $tmpdir/$BLAUNCHDIR/org.marionette-collective.mcollective.plist
124
125 #Make our Packages.  This requires XCode be installed
126 /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker -r $tmpdir --version $mcversion --title "MCollective" -l / -o MCollective_$mcversion.pkg -i org.marionette-collective.mcollective
127 /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
128 /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
129
130 #Clean up
131 rm -rf $tmpdir
132 rm -rf $common_tmpdir
133 rm -rf $client_tmpdir