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 if $status;
126 $cmd = "chmod 777 $Clearadm::CLEAROPTS{CLEARADM_BASE}/$_";
128 ($status, @output) = Execute "$cmd 2>&1";
130 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
134 verbose "[$Arch] Setting up clearagent daemon";
136 # Symlink $CLEARADM/etc/conf.d/clearadm -> /etc/init.d
137 my $confdir = '/etc/init.d';
139 error "Cannot find conf.d directory ($confdir)", 1 unless -d $confdir;
141 unless (-e "$confdir/clearagent") {
142 $cmd = "ln -s $FindBin::Bin/etc/init.d/clearagent $confdir";
144 ($status, @output) = Execute "$cmd 2>&1";
146 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
150 # Setup runlevel links
151 if ($ARCHITECTURE eq 'solaris') {
152 $cmd = "ln -s /etc/init.d/clearagent /etc/rc2.d/S90clearagent";
154 ($status, @output) = Execute "$cmd 2>&1";
156 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
158 verbose 'Starting clearagent';
160 $cmd = '/etc/init.d/clearagent';
162 ($status, @output) = Execute "$cmd 2>&1";
164 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
166 $cmd = 'update-rc.d clearagent defaults';
168 ($status, @output) = Execute "$cmd 2>&1";
170 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
172 verbose 'Starting clearagent';
174 $cmd = 'service clearagent start';
176 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
187 my ($status, @output, $cmd);
189 verbose 'Setting up Tasks...';
191 # Symlink $CLEARADM/etc/conf.d/cleartasks -> /etc/init.d
192 my $confdir = '/etc/init.d';
194 error "Cannot find conf.d directory ($confdir)", 1 unless -d $confdir;
196 unless (-e "$confdir/clearadm") {
197 $cmd = "ln -s $FindBin::Bin/etc/init.d/cleartasks $confdir";
199 ($status, @output) = Execute "$cmd 2>&1";
201 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
204 # Setup runlevel links
205 $cmd = 'update-rc.d cleartasks defaults';
207 ($status, @output) = Execute "$cmd 2>&1";
209 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
211 verbose 'Starting cleartasks';
213 $cmd = 'service cleartasks start';
215 ($status, @output) = Execute "$cmd 2>&1";
217 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
225 verbose 'Setting up Web...';
227 my ($status, @output, $cmd);
229 # Symlink $CLEARADM/etc/conf.d/clearadm -> /etc/apache2/conf.d
230 my $confdir = '/etc/apache2/conf.d';
232 error "Cannot find Apache 2 conf.d directory ($confdir)", 1 unless -d $confdir;
234 unless (-e "$confdir/clearadm") {
235 $cmd = "ln -s $FindBin::Bin/etc/conf.d/clearadm $confdir";
237 ($status, @output) = Execute "$cmd 2>&1";
239 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
243 if ($ARCHITECTURE eq 'cygwin') {
244 $cmd = 'net stop apache2; net start apache2';
246 $cmd = '/etc/init.d/apache2 restart';
249 ($status, @output) = Execute "$cmd 2>&1";
251 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status
259 sub SetupDatabase() {
260 verbose 'Setting up Database';
262 my ($status, @output, $cmd);
264 # TODO: Probably need to use -u root -p and prompt for MySQL root user's
266 $cmd = "mysql < $Clearadm::CLEAROPTS{CLEARADM_BASE}/etc/clearadm.sql";
268 ($status, @output) = Execute "$cmd 2>&1";
270 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
272 verbose 'Setting up database users';
274 $cmd = "mysql clearadm < $Clearadm::CLEAROPTS{CLEARADM_BASE}/etc/users.sql";
276 ($status, @output) = Execute "$cmd 2>&1";
278 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
280 verbose 'Setting up predefined tasks';
282 $cmd = "mysql clearadm < $Clearadm::CLEAROPTS{CLEARADM_BASE}/etc/load.sql";
284 ($status, @output) = Execute "$cmd 2>&1";
286 error "Unable to execute $cmd (Status: $status)\n" . join("\n", @output), $status if $status;
294 error "Cannot setup Clearadm when using Windows - hint try using Cgywin", 1
295 if $ARCHITECTURE eq 'windows';
297 Usage 'You must be root'
298 unless $> == 0 or $ARCHITECTURE eq 'cygwin';
303 usage => sub { Usage },
304 verbose => sub { set_verbose },
305 debug => sub { set_debug },
306 'package=s' => \$package,
307 ) or Usage "Invalid parameter";
309 Usage 'Extraneous options: ' . join ' ', @ARGV if @ARGV;
312 verbose "$FindBin::Script V$VERSION";
314 my @validPackages = (
322 my $lcpackage = lc $package;
324 unless (InArray $lcpackage, @validPackages) {
325 Usage "Invalid -package $package";
328 if ($lcpackage eq 'all') {
333 } elsif ($lcpackage eq 'agent') {
335 } elsif ($lcpackage eq 'database') {
337 } elsif ($lcpackage eq 'tasks') {
339 } elsif ($lcpackage eq 'agent') {