138 lines
4.4 KiB
Perl
Executable File
138 lines
4.4 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
|
|
BEGIN {
|
|
if ( exists $ENV{'CCM_TOOLS_HOME'} && defined $ENV{'CCM_TOOLS_HOME'} ) {
|
|
if ( -d "$ENV{'CCM_TOOLS_HOME'}/lib" ) {
|
|
push @INC, "$ENV{'CCM_TOOLS_HOME'}/lib";
|
|
} else {
|
|
print "$ENV{'CCM_TOOLS_HOME'}/lib was not found\n";
|
|
exit 1;
|
|
}
|
|
} else {
|
|
print "The CCM_TOOLS_HOME environment variable must be set first.\n";
|
|
exit 1;
|
|
}
|
|
}
|
|
|
|
use strict;
|
|
use CCM::CommandsUtil;
|
|
use CCM::Server;
|
|
use CCM::Util;
|
|
use File::Copy;
|
|
use File::Find;
|
|
use File::Spec;
|
|
use Getopt::Long;
|
|
|
|
my $OS = $^O;
|
|
my $CCM_HOME = CCM::Util::getRequiredEnvVariable("CCM_HOME");
|
|
my $CCM_DEV_HOME = $ENV{'CCM_DEV_HOME'};
|
|
my $ROOT =File::Spec-> rootdir();
|
|
my $help = 0;
|
|
my $usage = 0;
|
|
my $sc;
|
|
my $verbose = 0;
|
|
my $clean = 0;
|
|
|
|
Getopt::Long::Configure("pass_through");
|
|
if ( ! GetOptions(
|
|
'container=s' => \$sc,
|
|
'help' => \$help,
|
|
'usage' => \$usage,
|
|
'verbose+' => \$verbose,
|
|
'clean' => \$clean
|
|
)
|
|
) {
|
|
CCM::CommandsUtil::printUsageAndExit();
|
|
}
|
|
|
|
CCM::CommandsUtil::printHelpAndExit() if $help;
|
|
CCM::CommandsUtil::printUsageAndExit() if $usage;
|
|
# hostinit doesn't actually do anything useful without --clean,
|
|
# but we cannot make it default since it is destructive
|
|
CCM::CommandsUtil::printUsageAndExit() if not $clean;
|
|
|
|
my $conf = CCM::CommandsUtil::getServletContainerCommand($sc, 'conf');
|
|
|
|
CCM::CommandsUtil::runSafe($conf, @ARGV);
|
|
|
|
if ($OS eq 'MSWin32') {
|
|
$ROOT = defined $ENV{'CCM_ZIP_ROOT'} ? $ENV{'CCM_ZIP_ROOT'} : 'c:\ccm\\';
|
|
my $server = CCM::Server::getServer($sc);
|
|
$server->windowsReinstall();
|
|
}
|
|
|
|
my $destination = File::Spec->catdir("$CCM_HOME", "webapps");
|
|
|
|
my @classpath_files;
|
|
push @classpath_files, File::Spec->catfile($CCM_HOME, "ccm.classpath");
|
|
push @classpath_files, File::Spec->catfile($CCM_DEV_HOME, "ccm.classpath") if defined $CCM_DEV_HOME;
|
|
push @classpath_files, File::Spec->catfile("$ROOT", "etc", "ccm", "ccm.classpath");
|
|
my $classpath = (grep { -f } @classpath_files)[0];
|
|
CCM::Util::error("could not find ccm.classpath", 4) if (!defined $classpath);
|
|
|
|
my @webapps_files;
|
|
push @webapps_files, File::Spec->catfile($CCM_HOME, "ccm.webapps");
|
|
push @webapps_files, File::Spec->catfile($CCM_DEV_HOME, "ccm.webapps") if defined $CCM_DEV_HOME;
|
|
push @webapps_files, File::Spec->catfile("$ROOT", "etc", "ccm", "ccm.webapps");
|
|
my $webapps = (grep { -f } @webapps_files)[0];
|
|
CCM::Util::error("could not find ccm.webapps", 5) if (!defined $webapps);
|
|
|
|
my $verbose_args = "";
|
|
for (1..$verbose) {
|
|
$verbose_args .= " --verbose";
|
|
}
|
|
|
|
my $command = "ccm-run $verbose_args com.arsdigita.packaging.HostInit --classpath $classpath --destination $destination --webapps $webapps";
|
|
$command .= " --clean" if ($clean);
|
|
print "$command\n" if ($verbose);
|
|
|
|
CCM::CommandsUtil::runAndExitOnError($command);
|
|
|
|
# The following is a HACK to make certain webapp directories writable by the
|
|
# servlet container as needed.
|
|
if ($OS ne 'MSWin32' && $< == 0) {
|
|
my $ccm_user = defined $ENV{'CCM_USER'} ? $ENV{'CCM_USER'} : "servlet";
|
|
my $ccm_user_id = getpwnam($ccm_user);
|
|
if (defined $ccm_user_id) {
|
|
foreach ("$CCM_HOME/webapps/ROOT/packages/content-section/templates",
|
|
"$CCM_HOME/webapps/ccm-ldn-theme/__ccm__/themes-prod",
|
|
"$CCM_HOME/webapps/ccm-ldn-theme/__ccm__/themes-dev") {
|
|
if (-d) {
|
|
find( sub { chown ($ccm_user_id, -1, $File::Find::name); },
|
|
$_);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
my $root_webxml = File::Spec->catfile("$destination", "ROOT", "WEB-INF", "web.xml");
|
|
my $default_webxml = File::Spec->catfile("$destination", "ROOT", "WEB-INF", "web.xml-default");
|
|
my $source_webxml = $ENV{'CCM_WEBXML'};
|
|
|
|
if ( ! defined $source_webxml &&
|
|
-f $default_webxml &&
|
|
-r $default_webxml ) {
|
|
$source_webxml = $default_webxml;
|
|
}
|
|
|
|
if ( $verbose ) {
|
|
if ( defined $source_webxml ) {
|
|
print "CCM_WEBXML: $source_webxml\n";
|
|
print "destination: $root_webxml\n";
|
|
} else {
|
|
print "CCM_WEBXML: <not defined>\n";
|
|
}
|
|
}
|
|
|
|
if ( defined $source_webxml ) {
|
|
if ( ! -f $source_webxml ) {
|
|
CCM::Util::error("CCM_WEBXML value '$source_webxml' is not a valid file", 6);
|
|
}
|
|
if ( ! -r $source_webxml ) {
|
|
CCM::Util::error("CCM_WEBXML file '$source_webxml' cannot be read", 6);
|
|
}
|
|
if ( ! copy ($source_webxml, $root_webxml) ) {
|
|
CCM::Util::error("error copying '$source_webxml' to '$root_webxml'", 6);
|
|
}
|
|
}
|