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