randyk 2002/12/20 23:26:16
Modified: src/docs/1.0/os/win32 config.cfg install.pod
src/docs/2.0/os/win32 config.cfg install.pod
Added: src/docs/1.0/os/win32 mpinstall
src/docs/2.0/os/win32 mpinstall
Log:
added script to get and fetch mod_perl on Win32 via ppm.
Revision Changes Path
1.7 +4 -0 modperl-docs/src/docs/1.0/os/win32/config.cfg
Index: config.cfg
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/1.0/os/win32/config.cfg,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- config.cfg 22 Jul 2002 15:21:51 -0000 1.6
+++ config.cfg 21 Dec 2002 07:26:16 -0000 1.7
@@ -15,6 +15,10 @@
multithread.pod
)],
+ copy_glob => [qw(
+ mpinstall
+ )],
+
changes => 'Changes.pod',
);
1.15 +9 -2 modperl-docs/src/docs/1.0/os/win32/install.pod
Index: install.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/1.0/os/win32/install.pod,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- install.pod 19 Dec 2002 18:59:25 -0000 1.14
+++ install.pod 21 Dec 2002 07:26:16 -0000 1.15
@@ -262,8 +262,15 @@
After installing Perl and Apache, you can then install mod_perl via
the PPM utility. ActiveState does not maintain mod_perl in their ppm
repository, so you must get it from a different location other than
-ActiveState's site. One way is simply as (broken over two lines for
-readability)
+ActiveState's site. A quick way to do this is to download
+the script F<mpinstall> and save it as, for example, I<mpinstall>.
+Invoking this as C<perl mpinstall> on a command line
+will take you through a dialogue, based on your configuration,
+which will determine and install, via C<ppm>, the desired
+mod_perl ppm package.
+
+The direct way to install mod_perl via ppm is simply as (broken over
+two lines for readability)
C:\> ppm install
http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd
1.1 modperl-docs/src/docs/1.0/os/win32/mpinstall
Index: mpinstall
===================================================================
#####################################################################
# A Perl script to fetch and install via ppm mod_perl on Win32
# Copyright 2002, by Randy Kobes.
# This script may be distributed under the same terms as Perl itself.
# Please report problems to Randy Kobes <[EMAIL PROTECTED]>
#####################################################################
use strict;
use warnings;
use ExtUtils::MakeMaker;
use LWP::Simple;
use Archive::Tar;
use Compress::Zlib;
use File::Copy;
use Config;
die "This only works for Win32" unless $^O =~ /Win32/i;
die "No mod_perl ppm package available for this Perl" if ($] < 5.006001);
my ($apache2, $apache);
# find a possible Apache2 directory
APACHE2: {
for my $drive ('C'..'G') {
for my $p ('Apache2', 'Program files/Apache2',
'Program Files/Apache Group/Apache2') {
if (-d "$drive:/$p") {
$apache2 = "$drive:/$p";
last APACHE2;
}
}
}
}
if ($apache2) {
my $ans = prompt(qq{Install mod_perl-2 for "$apache2"?}, 'yes');
$apache2 = undef unless ($ans =~ /^y/i);
}
# if no Apache2, try to find Apache1
unless ($apache2) {
APACHE: {
for my $drive ('C'..'G') {
for my $p ('Apache', 'Program Files/Apache',
'Program Files/Apache Group/Apache') {
if (-d "$drive:/$p") {
$apache = "$drive:/$p";
last APACHE;
}
}
}
}
}
if ($apache) {
my $ans = prompt(qq{Install mod_perl-1 for "$apache"?}, 'yes');
$apache = undef unless ($ans =~ /^y/i);
}
# check Apache versions
if ($apache or $apache2) {
my $vers;
if ($apache) {
$vers = qx{"$apache\\apache.exe" -v};
die qq{"$apache" does not appear to be version 1.3}
unless $vers =~ m!Apache/1.3!;
}
else {
$vers = qx{"$apache2\\bin\\apache.exe" -v};
die qq{"$apache2" does not appear to be version 2.0}
unless $vers =~ m!Apache/2.0!;
}
}
# prompt to get an Apache installation directory
else {
my $dir = prompt("Where is your apache installation directory?", '');
die 'Need to specify the Apache installation directory' unless $dir;
die qq{"$dir" does not exist} unless (-d $dir);
if ($dir =~ /Apache2/) {
my $ans = prompt(qq{Install mod_perl-2 for "$dir"?}, 'yes');
$apache2 = $dir if ($ans =~ /^y/i);
}
else {
my $ans = prompt(qq{Install mod_perl-1 for "$dir"?}, 'yes');
$apache = $dir if ($ans =~ /^y/i);
}
unless ($apache or $apache2) {
my $mpv = prompt('Which mod_perl version would you like [1 or 2]?', 2);
if ($mpv == 1) {
$apache = $dir;
}
elsif ($mpv == 2) {
$apache2 = $dir;
}
else {
die 'Please specify either "1" or "2"';
}
}
}
die 'Please specify an Apache directory' unless ($apache or $apache2);
my $theoryx5 = 'http://theoryx5.uwinnipeg.ca';
my ($ppd, $tgz, $ppdfile, $tgzfile);
# set appropriate ppd and tar.gz files
if ($] < 5.008) {
if ($apache2) {
$ppdfile = 'mod_perl-2.ppd';
$tgzfile = 'mod_perl-2.tar.gz';
$ppd = $theoryx5 . '/ppmpackages/' . $ppdfile;
$tgz = $theoryx5 . '/ppmpackages/x86/' . $tgzfile;
}
else {
my $ans = prompt('Do you need EAPI support for mod_ssl?', 'no');
if ($ans =~ /^n/i) {
$ppdfile = 'mod_perl.ppd';
$tgzfile = 'mod_perl.tar.gz';
$ppd = $theoryx5 . '/ppmpackages/' . $ppdfile;
$tgz = $theoryx5 . '/ppmpackages/x86/' . $tgzfile;
}
else {
$ppdfile = 'mod_perl-eapi.ppd';
$tgzfile = 'mod_perl-eapi.tar.gz';
$ppd = $theoryx5 . '/ppmpackages/' . $ppdfile;
$tgz = $theoryx5 . '/ppmpackages/x86/' . $tgzfile;
}
}
}
else {
if ($apache2) {
$ppdfile = 'mod_perl.ppd';
$tgzfile = 'mod_perl.tar.gz';
$ppd = $theoryx5 . '/ppms/' . $ppdfile;
$tgz = $theoryx5 . '/ppms/x86/' . $tgzfile;
}
else {
die 'No mod_perl-1 package available for this perl version';
}
}
my $tmp = $ENV{TEMP} || $ENV{TMP} || '.';
chdir $tmp or die "Cannot chdir to $tmp: $!";
# fetch the ppd and tar.gz files
print "Fetching $ppd ...";
getstore($ppd, $ppdfile);
print " done!\n";
die "Failed to fetch $ppd" unless -e $ppdfile;
print "Fetching $tgz ...";
getstore($tgz, $tgzfile);
print " done!\n";
die "Failed to fetch $tgz" unless -e $tgzfile;
# edit the ppd file to reflect a local installation
my $old = $ppdfile . 'old';
rename $ppdfile, $old
or die "renaming $ppdfile to $old failed: $!";
open(OLD, $old) or die "Cannot open $old: $!";
open(NEW, ">$ppdfile") or die "Cannot open $ppdfile: $!";
while (<OLD>) {
next if /<INSTALL/;
s/$tgz/$tgzfile/;
print NEW $_;
}
close OLD;
close NEW;
# install mod_perl via ppm
my $ppm = $Config{bin} . '\ppm';
my @args = ($ppm, 'install', $ppdfile);
print "[EMAIL PROTECTED]";
system(@args) == 0 or die "system @args failed: $?";
# extract mod_perl.so from the tar.gz file
my $so = 'mod_perl.so';
my $archive = Archive::Tar->new($tgzfile, 1);
print "\nExtracting mod_perl.so ...";
$archive->extract($so);
die "Extraction of $so failed" unless (-e $so);
print " done!\n";
# figure out where to place mod_perl.so
my $modules = $apache ? "$apache/modules" : "$apache2/modules";
$modules = prompt("Where should $so be placed?", $modules);
unless (-d $modules) {
my $ans = prompt(qq{"$modules" does not exist. Create it?}, 'yes');
if ($ans =~ /^y/i) {
mkdir $modules or die "Cannot create $modules: $!";
}
else {
$modules = undef;
}
}
# move mod_perl.so to the Apache modules directory
if ($modules) {
print "\nMoving $so to $modules ...";
move($so, qq{$modules})
or die "Moving $so to $modules failed: $!";
print " done!\n";
}
else {
die "Please install $so to your Apache modules directory manually";
}
# clean up, if desired
my $ans = prompt("Remove temporary installation files from $tmp?", 'yes');
if ($ans =~ /^y/i) {
unlink ($ppdfile, $old, $tgzfile)
or warn "Cannot unlink files from $tmp: $!";
}
# get the name and location of the perlxx.dll
(my $dll = $Config{libperl}) =~ s!\.lib$!.dll!;
$dll = $Config{bin} . '/' . $dll;
$dll =~ s!\\!/!g;
# suggest a minimal httpd.conf configuration
my $ap = $apache || $apache2;
print <<"END";
mod_perl was successfully installed.
To try it out, put the following directives in your
Apache httpd.conf file (under $ap/conf):
LoadFile "$dll"
LoadModule perl_module modules/$so
in the section where other apache modules are loaded,
and then fire up the server. You may also have to add
$Config{bin} to your PATH environment variable.
For more information, visit http://perl.apache.org/.
END
1.7 +4 -0 modperl-docs/src/docs/2.0/os/win32/config.cfg
Index: config.cfg
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/os/win32/config.cfg,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- config.cfg 22 Jul 2002 15:21:51 -0000 1.6
+++ config.cfg 21 Dec 2002 07:26:16 -0000 1.7
@@ -14,6 +14,10 @@
config.pod
)],
+ copy_glob => [qw(
+ mpinstall
+ )],
+
changes => 'Changes.pod',
);
1.13 +8 -1 modperl-docs/src/docs/2.0/os/win32/install.pod
Index: install.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/os/win32/install.pod,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- install.pod 14 Dec 2002 18:23:47 -0000 1.12
+++ install.pod 21 Dec 2002 07:26:16 -0000 1.13
@@ -135,7 +135,14 @@
After installing Perl and Apache 2.0, you can then install mod_perl
via the C<PPM> utility. ActiveState does not maintain mod_perl in
their ppm repository, so you must get it from a different location
-other than ActiveState's site. One way is simply as (broken over two
+other than ActiveState's site. A quick way to do this is to download
+the script F<mpinstall> and save it as, for example, I<mpinstall>.
+Invoking this as C<perl mpinstall> on a command line
+will take you through a dialogue, based on your configuration,
+which will determine and install, via C<ppm>, the desired
+mod_perl ppm package.
+
+The direct way to install mod_perl via ppm is simply as (broken over two
lines for readability)
C:\> ppm install
1.1 modperl-docs/src/docs/2.0/os/win32/mpinstall
Index: mpinstall
===================================================================
#####################################################################
# A Perl script to fetch and install via ppm mod_perl on Win32
# Copyright 2002, by Randy Kobes.
# This script may be distributed under the same terms as Perl itself.
# Please report problems to Randy Kobes <[EMAIL PROTECTED]>
#####################################################################
use strict;
use warnings;
use ExtUtils::MakeMaker;
use LWP::Simple;
use Archive::Tar;
use Compress::Zlib;
use File::Copy;
use Config;
die "This only works for Win32" unless $^O =~ /Win32/i;
die "No mod_perl ppm package available for this Perl" if ($] < 5.006001);
my ($apache2, $apache);
# find a possible Apache2 directory
APACHE2: {
for my $drive ('C'..'G') {
for my $p ('Apache2', 'Program files/Apache2',
'Program Files/Apache Group/Apache2') {
if (-d "$drive:/$p") {
$apache2 = "$drive:/$p";
last APACHE2;
}
}
}
}
if ($apache2) {
my $ans = prompt(qq{Install mod_perl-2 for "$apache2"?}, 'yes');
$apache2 = undef unless ($ans =~ /^y/i);
}
# if no Apache2, try to find Apache1
unless ($apache2) {
APACHE: {
for my $drive ('C'..'G') {
for my $p ('Apache', 'Program Files/Apache',
'Program Files/Apache Group/Apache') {
if (-d "$drive:/$p") {
$apache = "$drive:/$p";
last APACHE;
}
}
}
}
}
if ($apache) {
my $ans = prompt(qq{Install mod_perl-1 for "$apache"?}, 'yes');
$apache = undef unless ($ans =~ /^y/i);
}
# check Apache versions
if ($apache or $apache2) {
my $vers;
if ($apache) {
$vers = qx{"$apache\\apache.exe" -v};
die qq{"$apache" does not appear to be version 1.3}
unless $vers =~ m!Apache/1.3!;
}
else {
$vers = qx{"$apache2\\bin\\apache.exe" -v};
die qq{"$apache2" does not appear to be version 2.0}
unless $vers =~ m!Apache/2.0!;
}
}
# prompt to get an Apache installation directory
else {
my $dir = prompt("Where is your apache installation directory?", '');
die 'Need to specify the Apache installation directory' unless $dir;
die qq{"$dir" does not exist} unless (-d $dir);
if ($dir =~ /Apache2/) {
my $ans = prompt(qq{Install mod_perl-2 for "$dir"?}, 'yes');
$apache2 = $dir if ($ans =~ /^y/i);
}
else {
my $ans = prompt(qq{Install mod_perl-1 for "$dir"?}, 'yes');
$apache = $dir if ($ans =~ /^y/i);
}
unless ($apache or $apache2) {
my $mpv = prompt('Which mod_perl version would you like [1 or 2]?', 2);
if ($mpv == 1) {
$apache = $dir;
}
elsif ($mpv == 2) {
$apache2 = $dir;
}
else {
die 'Please specify either "1" or "2"';
}
}
}
die 'Please specify an Apache directory' unless ($apache or $apache2);
my $theoryx5 = 'http://theoryx5.uwinnipeg.ca';
my ($ppd, $tgz, $ppdfile, $tgzfile);
# set appropriate ppd and tar.gz files
if ($] < 5.008) {
if ($apache2) {
$ppdfile = 'mod_perl-2.ppd';
$tgzfile = 'mod_perl-2.tar.gz';
$ppd = $theoryx5 . '/ppmpackages/' . $ppdfile;
$tgz = $theoryx5 . '/ppmpackages/x86/' . $tgzfile;
}
else {
my $ans = prompt('Do you need EAPI support for mod_ssl?', 'no');
if ($ans =~ /^n/i) {
$ppdfile = 'mod_perl.ppd';
$tgzfile = 'mod_perl.tar.gz';
$ppd = $theoryx5 . '/ppmpackages/' . $ppdfile;
$tgz = $theoryx5 . '/ppmpackages/x86/' . $tgzfile;
}
else {
$ppdfile = 'mod_perl-eapi.ppd';
$tgzfile = 'mod_perl-eapi.tar.gz';
$ppd = $theoryx5 . '/ppmpackages/' . $ppdfile;
$tgz = $theoryx5 . '/ppmpackages/x86/' . $tgzfile;
}
}
}
else {
if ($apache2) {
$ppdfile = 'mod_perl.ppd';
$tgzfile = 'mod_perl.tar.gz';
$ppd = $theoryx5 . '/ppms/' . $ppdfile;
$tgz = $theoryx5 . '/ppms/x86/' . $tgzfile;
}
else {
die 'No mod_perl-1 package available for this perl version';
}
}
my $tmp = $ENV{TEMP} || $ENV{TMP} || '.';
chdir $tmp or die "Cannot chdir to $tmp: $!";
# fetch the ppd and tar.gz files
print "Fetching $ppd ...";
getstore($ppd, $ppdfile);
print " done!\n";
die "Failed to fetch $ppd" unless -e $ppdfile;
print "Fetching $tgz ...";
getstore($tgz, $tgzfile);
print " done!\n";
die "Failed to fetch $tgz" unless -e $tgzfile;
# edit the ppd file to reflect a local installation
my $old = $ppdfile . 'old';
rename $ppdfile, $old
or die "renaming $ppdfile to $old failed: $!";
open(OLD, $old) or die "Cannot open $old: $!";
open(NEW, ">$ppdfile") or die "Cannot open $ppdfile: $!";
while (<OLD>) {
next if /<INSTALL/;
s/$tgz/$tgzfile/;
print NEW $_;
}
close OLD;
close NEW;
# install mod_perl via ppm
my $ppm = $Config{bin} . '\ppm';
my @args = ($ppm, 'install', $ppdfile);
print "[EMAIL PROTECTED]";
system(@args) == 0 or die "system @args failed: $?";
# extract mod_perl.so from the tar.gz file
my $so = 'mod_perl.so';
my $archive = Archive::Tar->new($tgzfile, 1);
print "\nExtracting mod_perl.so ...";
$archive->extract($so);
die "Extraction of $so failed" unless (-e $so);
print " done!\n";
# figure out where to place mod_perl.so
my $modules = $apache ? "$apache/modules" : "$apache2/modules";
$modules = prompt("Where should $so be placed?", $modules);
unless (-d $modules) {
my $ans = prompt(qq{"$modules" does not exist. Create it?}, 'yes');
if ($ans =~ /^y/i) {
mkdir $modules or die "Cannot create $modules: $!";
}
else {
$modules = undef;
}
}
# move mod_perl.so to the Apache modules directory
if ($modules) {
print "\nMoving $so to $modules ...";
move($so, qq{$modules})
or die "Moving $so to $modules failed: $!";
print " done!\n";
}
else {
die "Please install $so to your Apache modules directory manually";
}
# clean up, if desired
my $ans = prompt("Remove temporary installation files from $tmp?", 'yes');
if ($ans =~ /^y/i) {
unlink ($ppdfile, $old, $tgzfile)
or warn "Cannot unlink files from $tmp: $!";
}
# get the name and location of the perlxx.dll
(my $dll = $Config{libperl}) =~ s!\.lib$!.dll!;
$dll = $Config{bin} . '/' . $dll;
$dll =~ s!\\!/!g;
# suggest a minimal httpd.conf configuration
my $ap = $apache || $apache2;
print <<"END";
mod_perl was successfully installed.
To try it out, put the following directives in your
Apache httpd.conf file (under $ap/conf):
LoadFile "$dll"
LoadModule perl_module modules/$so
in the section where other apache modules are loaded,
and then fire up the server. You may also have to add
$Config{bin} to your PATH environment variable.
For more information, visit http://perl.apache.org/.
END
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]