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 ($ARCH 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), 1
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), 1
100 my $Arch = ucfirst $ARCH;
102 verbose 'Creating clearagent user';
104 $cmd = 'useradd -Mr clearagent';
106 ($status, @output) = Execute "$cmd 2>&1";
109 warning "The user clearagent already exists";
110 } elsif ($status != 0) {
111 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1;
114 verbose 'Setting permissions on log and var directories';
116 $cmd = "chmod 777 $Clearadm::CLEAROPTS{CLEARADM_BASE}/var;";
117 $cmd .= "chmod 777 $Clearadm::CLEAROPTS{CLEARADM_BASE}/var/run;";
118 $cmd .= "chmod 777 $Clearadm::CLEAROPTS{CLEARADM_BASE}/log";
120 ($status, @output) = Execute "$cmd 2>&1";
122 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
125 verbose "[$Arch] Setting up clearagent daemon";
127 # Symlink $CLEARADM/etc/conf.d/clearadm -> /etc/init.d
128 my $confdir = '/etc/init.d';
130 error "Cannot find conf.d directory ($confdir)", 1
133 unless (-e "$confdir/clearadm") {
134 $cmd = "ln -s $FindBin::Bin/etc/init.d/clearadm $confdir";
136 ($status, @output) = Execute "$cmd 2>&1";
138 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
142 # Setup runlevel links
143 $cmd = 'update-rc.d clearagent defaults';
145 ($status, @output) = Execute "$cmd 2>&1";
147 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
150 verbose 'Starting clearagent';
152 $cmd = 'service clearagent start';
154 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
164 my ($status, @output, $cmd);
166 verbose 'Setting up Tasks...';
168 # Symlink $CLEARADM/etc/conf.d/cleartasks -> /etc/init.d
169 my $confdir = '/etc/init.d';
171 error "Cannot find conf.d directory ($confdir)", 1
174 unless (-e "$confdir/clearadm") {
175 $cmd = "ln -s $FindBin::Bin/etc/init.d/cleartasks $confdir";
177 ($status, @output) = Execute "$cmd 2>&1";
179 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
183 # Setup runlevel links
184 $cmd = 'update-rc.d cleartasks defaults';
186 ($status, @output) = Execute "$cmd 2>&1";
188 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
191 verbose 'Starting cleartasks';
193 $cmd = 'service cleartasks start';
195 ($status, @output) = Execute "$cmd 2>&1";
197 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
206 verbose 'Setting up Web...';
208 my ($status, @output, $cmd);
210 # Symlink $CLEARADM/etc/conf.d/clearadm -> /etc/apache2/conf.d
211 my $confdir = '/etc/apache2/conf.d';
213 error "Cannot find Apache 2 conf.d directory ($confdir)", 1
216 unless (-e "$confdir/clearadm") {
217 $cmd = "ln -s $FindBin::Bin/etc/conf.d/clearadm $confdir";
219 ($status, @output) = Execute "$cmd 2>&1";
221 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
225 if ($ARCH eq 'cygwin') {
226 $cmd = 'net stop apache2; net start apache2';
228 $cmd = '/etc/init.d/apache2 restart';
231 ($status, @output) = Execute "$cmd 2>&1";
233 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
241 sub SetupDatabase () {
242 verbose 'Setting up Database';
244 my ($status, @output, $cmd);
246 # TODO: Probably need to use -u root -p and prompt for MySQL root user's
248 $cmd = "mysql < $Clearadm::CLEAROPTS{CLEARADM_BASE}/etc/clearadm.sql";
250 ($status, @output) = Execute "$cmd 2>&1";
252 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
255 verbose 'Setting up database users';
257 $cmd = "mysql clearadm < $Clearadm::CLEAROPTS{CLEARADM_BASE}/etc/users.sql";
259 ($status, @output) = Execute "$cmd 2>&1";
261 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
264 verbose 'Setting up predefined tasks';
266 $cmd = "mysql clearadm < $Clearadm::CLEAROPTS{CLEARADM_BASE}/etc/load.sql";
268 ($status, @output) = Execute "$cmd 2>&1";
270 error "Unable to execute $cmd (Status: $status)\n" . join ("\n", @output), 1
279 error "Cannot setup Clearadm when using Windows - hint try using Cgywin", 1
280 if $ARCH eq 'windows';
282 Usage 'You must be root'
283 unless $> == 0 or $ARCH eq 'cygwin';
288 usage => sub { Usage },
289 verbose => sub { set_verbose },
290 debug => sub { set_debug },
291 'package=s' => \$package,
292 ) or Usage "Invalid parameter";
294 Usage 'Extraneous options: ' . join ' ', @ARGV
298 verbose "$FindBin::Script V$VERSION";
300 my @validPackages = (
308 my $lcpackage = lc $package;
310 unless (InArray $lcpackage, @validPackages) {
311 Usage "Invalid -package $package";
314 if ($lcpackage eq 'all') {
319 } elsif ($lcpackage eq 'agent') {
321 } elsif ($lcpackage eq 'database') {
323 } elsif ($lcpackage eq 'tasks') {
325 } elsif ($lcpackage eq 'agent') {