libreccm-legacy/tools-legacy/tools/lib/CCM/Server/Resin.pm

149 lines
3.9 KiB
Perl
Executable File

# CCM::Server::Resin
#
# Copyright (C) 2004 Red Hat Inc. All Rights Reserved.
#
# The contents of this file are subject to the CCM Public
# License (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of
# the License at http://www.redhat.com/licenses/ccmpl.html
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# Daniel Berrange <berrange@redhat.com>
# Dennis Gregorovic <dgregor@redhat.com>
#
# $Id: Resin.pm 288 2005-02-22 00:55:45Z sskracic $
=pod
=head1 NAME
CCM::Server::Resin
=head1 SYNOPSIS
=head1 DESCRIPTION
=head1 METHODS
=over 4
=cut
package CCM::Server::Resin;
use strict;
use vars qw(@ISA);
use CCM::Server;
use CCM::Util;
use File::Spec;
@ISA = qw(CCM::Server);
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $self = $class->SUPER::new(@_);
$self->{verbose} = 0;
bless $self, $class;
return $self;
}
sub name {
my $self = shift;
return "resin";
}
sub windowsInstall {
my $self = shift;
return if $self->windowsServiceInstalled();
my $service_name = $self->getServiceName();
my $command = $self->getCommandLine();
$self->run("$command -install-as $service_name");
open (OUT, "> " . $self->windowsServiceLockFile())
or CCM::Util::error("could not open " . $self->windowsServiceLockFile());
print OUT $self->getServiceName();
close OUT;
}
sub windowsUninstall {
my $self = shift;
return unless $self->windowsServiceInstalled();
my $service_name = $self->getServiceName();
my $command = $self->getCommandLine();
$self->windowsStop();
$self->run("$command -remove-as $service_name");
unlink $self->windowsServiceLockFile();
}
sub getCommandLine {
my $self = shift;
my $log_dir = File::Spec->catdir($self->getCCMHome(), 'logs');
my $server_root = $self->getCCMHome();
my $classpath = $self->getClassPath();
my $resin_home = $self->getResinHome();
my $system_properties = $self->getSystemProperties();
my $java_opts = defined $ENV{'JAVA_OPTS'} ? $ENV{'JAVA_OPTS'} :
( defined $ENV{'JRE_ARGS'} ?
$ENV{'JRE_ARGS'} :
"" );
my $command;
if ($^O eq 'MSWin32') {
$command = File::Spec->catfile ($self->getResinHome(), 'bin', 'httpd');
} else {
$command = File::Spec->catfile ($self->getResinHome(), 'bin', 'httpd.sh');
$command .= " -pid " . File::Spec->catfile($log_dir, 'resin.pid');
}
if ($classpath ne "") {
$command .= " -classpath $classpath";
}
$command .= " -verbose";
$command .= " -resin_home " . $self->getResinHome();
$command .= " -server_root $server_root";
$command .= " -conf " . File::Spec->catfile($self->getCCMHome(), 'conf', 'resin.conf');
$command .= " -stdout " . File::Spec->catfile($log_dir, 'resin-stdout.log');
$command .= " -stderr " . File::Spec->catfile($log_dir, 'resin-stderr.log');
$command .= " $system_properties $java_opts";
return $command;
}
sub getResinHome {
my $self = shift;
if (!defined $self->{resin_home}) {
my $resin_home = $ENV{'RESIN_HOME'};
if (!defined $resin_home) {
if ( -d '/opt/resin/latest' ) {
$resin_home = '/opt/resin/latest';
} else {
$resin_home = (reverse CCM::Util::versionSort (grep { -d $_ || -l $_ } glob("/opt/resin/2.1*")))[0];
}
if (!defined $resin_home) {
CCM::Util::error ("RESIN_HOME not set and no Resin installation found", 3);
}
}
$self->{resin_home} = $resin_home;
}
return $self->{resin_home};
}
1 # So that the require or use succeeds.
__END__
=back 4
=head1 AUTHORS
=head1 COPYRIGHT
=head1 SEE ALSO
L<perl(1)>
=cut