5 =head1 NAME $RCSfile: setup.pl,v $
15 Andrew DeFaria <Andrew@ClearSCM.com>
23 Mon Dec 13 09:13:27 EST 2010
27 $Date: 2011/01/09 18:12:05 $
33 Usage setup.pl: [-u|sage] [-ve|rbose] [-deb|ug]
34 [-package [all|agent|database|tasks|web]]
37 -u|sage: Displays usage
40 -deb|ug: Output debug messages
42 -package: Which subpackage to set up (Default: all).
46 This script will setup Clearadm packages on machines. You must be root
47 (or administrator on Windows) to setup packages. Setting up web package
48 configures the web server. Setting up the tasks portion sets up cleartasks
49 poriton. Cleartasks periodically runs the predefined and user defined
50 tasks and should only be set up on one machine. The agent package sets up
51 clearagent.pl. This should be run on all machines that you intend to monitor.
52 The database package sets up the Clearadm database.
54 Default, sets up all packages on the current machine.
66 use lib "$FindBin::Bin/lib", "$FindBin::Bin/../lib";
73 my $VERSION = '$Revision: 1.1 $';
74 ($VERSION) = ($VERSION =~ /\$Revision: (.*) /);
77 verbose 'Setting up Agent...';
79 my ($status, @output, $cmd);
81 if ($ARCHITECTURE eq 'cygwin') {
82 verbose '[Cygwin] Creating up Clearagent Service';
84 $cmd = 'cygrunsrv -I clearagent -p C:/Cygwin/bin/perl ';
85 $cmd .= '> -a "/opt/clearscm/clearadm/clearagent.pl -nodaemon"';
87 ($status, @output) = Execute "$cmd 2>&1";
89 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
92 verbose '[Cygwin] Starting Clearagent Service';
94 $cmd .= 'net start clearagent';
95 ($status, @output) = Execute "$cmd 2>&1";
97 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
100 my $Arch = ucfirst $ARCHITECTURE;
102 verbose 'Creating clearagent user';
104 $cmd = 'useradd -Mr clearagent';
105 $cmd = 'useradd clearagent' if $ARCHITECTURE eq 'solaris';
107 ($status, @output) = Execute "$cmd 2>&1";
110 warning "The user clearagent already exists";
111 } elsif ($status == 2304) {
113 } elsif ($status != 0) {
114 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status;
117 verbose 'Setting permissions on log and var directories';
119 for (qw(var var/run log)) {
120 $cmd = "mkdir -p $Clearadm::CLEAROPTS{CLEARADM_BASE}/$_";
122 ($status, @output) = Execute "$cmd 2>&1";
124 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
127 $cmd = "chmod 777 $Clearadm::CLEAROPTS{CLEARADM_BASE}/$_";
129 ($status, @output) = Execute "$cmd 2>&1";
131 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
135 verbose "[$Arch] Setting up clearagent daemon";
137 # Symlink $CLEARADM/etc/conf.d/clearadm -> /etc/init.d
138 my $confdir = '/etc/init.d';
140 error "Cannot find conf.d directory ($confdir)", 1
143 unless (-e "$confdir/clearagent") {
144 $cmd = "ln -s $FindBin::Bin/etc/init.d/clearagent $confdir";
146 ($status, @output) = Execute "$cmd 2>&1";
148 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
152 # Setup runlevel links
153 if ($ARCHITECTURE eq 'solaris') {
154 $cmd = "ln -s /etc/init.d/clearagent /etc/rc2.d/S90clearagent";
156 ($status, @output) = Execute "$cmd 2>&1";
158 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
161 verbose 'Starting clearagent';
163 $cmd = '/etc/init.d/clearagent';
165 ($status, @output) = Execute "$cmd 2>&1";
167 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
170 $cmd = 'update-rc.d clearagent defaults';
172 ($status, @output) = Execute "$cmd 2>&1";
174 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
177 verbose 'Starting clearagent';
179 $cmd = 'service clearagent start';
181 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
192 my ($status, @output, $cmd);
194 verbose 'Setting up Tasks...';
196 # Symlink $CLEARADM/etc/conf.d/cleartasks -> /etc/init.d
197 my $confdir = '/etc/init.d';
199 error "Cannot find conf.d directory ($confdir)", 1
202 unless (-e "$confdir/clearadm") {
203 $cmd = "ln -s $FindBin::Bin/etc/init.d/cleartasks $confdir";
205 ($status, @output) = Execute "$cmd 2>&1";
207 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
211 # Setup runlevel links
212 $cmd = 'update-rc.d cleartasks defaults';
214 ($status, @output) = Execute "$cmd 2>&1";
216 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
219 verbose 'Starting cleartasks';
221 $cmd = 'service cleartasks start';
223 ($status, @output) = Execute "$cmd 2>&1";
225 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
234 verbose 'Setting up Web...';
236 my ($status, @output, $cmd);
238 # Symlink $CLEARADM/etc/conf.d/clearadm -> /etc/apache2/conf.d
239 my $confdir = '/etc/apache2/conf.d';
241 error "Cannot find Apache 2 conf.d directory ($confdir)", 1
244 unless (-e "$confdir/clearadm") {
245 $cmd = "ln -s $FindBin::Bin/etc/conf.d/clearadm $confdir";
247 ($status, @output) = Execute "$cmd 2>&1";
249 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
253 if ($ARCHITECTURE eq 'cygwin') {
254 $cmd = 'net stop apache2; net start apache2';
256 $cmd = '/etc/init.d/apache2 restart';
259 ($status, @output) = Execute "$cmd 2>&1";
261 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
269 sub SetupDatabase () {
270 verbose 'Setting up Database';
272 my ($status, @output, $cmd);
274 # TODO: Probably need to use -u root -p and prompt for MySQL root user's
276 $cmd = "mysql < $Clearadm::CLEAROPTS{CLEARADM_BASE}/etc/clearadm.sql";
278 ($status, @output) = Execute "$cmd 2>&1";
280 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
283 verbose 'Setting up database users';
285 $cmd = "mysql clearadm < $Clearadm::CLEAROPTS{CLEARADM_BASE}/etc/users.sql";
287 ($status, @output) = Execute "$cmd 2>&1";
289 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
292 verbose 'Setting up predefined tasks';
294 $cmd = "mysql clearadm < $Clearadm::CLEAROPTS{CLEARADM_BASE}/etc/load.sql";
296 ($status, @output) = Execute "$cmd 2>&1";
298 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
307 error "Cannot setup Clearadm when using Windows - hint try using Cgywin", 1
308 if $ARCHITECTURE eq 'windows';
310 Usage 'You must be root'
311 unless $> == 0 or $ARCHITECTURE eq 'cygwin';
316 usage => sub { Usage },
317 verbose => sub { set_verbose },
318 debug => sub { set_debug },
319 'package=s' => \$package,
320 ) or Usage "Invalid parameter";
322 Usage 'Extraneous options: ' . join ' ', @ARGV
326 verbose "$FindBin::Script V$VERSION";
328 my @validPackages = (
336 my $lcpackage = lc $package;
338 unless (InArray $lcpackage, @validPackages) {
339 Usage "Invalid -package $package";
342 if ($lcpackage eq 'all') {
347 } elsif ($lcpackage eq 'agent') {
349 } elsif ($lcpackage eq 'database') {
351 } elsif ($lcpackage eq 'tasks') {
353 } elsif ($lcpackage eq 'agent') {