randyk      2003/01/03 08:48:43

  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 distinstall
               src/docs/2.0/os/win32 distinstall
  Removed:     src/docs/1.0/os/win32 get-perl-win32-bin
               src/docs/2.0/os/win32 get-Perl-5.8-win32-bin
  Log:
  merge all-in-one package fetching scripts into one.
  
  Revision  Changes    Path
  1.10      +1 -1      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.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- config.cfg        3 Jan 2003 04:43:48 -0000       1.9
  +++ config.cfg        3 Jan 2003 16:48:43 -0000       1.10
  @@ -17,7 +17,7 @@
   
       copy_glob => [qw(
           mpinstall
  -        get-perl-win32-bin
  +        distinstall
       )],
   
       changes => 'Changes.pod',
  
  
  
  1.21      +2 -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.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- install.pod       2 Jan 2003 21:56:50 -0000       1.20
  +++ install.pod       3 Jan 2003 16:48:43 -0000       1.21
  @@ -233,8 +233,8 @@
   contains this distribution split across multiple files -
   see F<README.join> for instructions on how to join them.
   Alternatively, if you have Perl already, you can get the script
  -F<get-perl-win32-bin> which, when invoked as
  -C<perl get-perl-win32-bin>, will fetch and join
  +F<distinstall> which, when invoked as
  +C<perl distinstall>, will fetch and join
   the files for you.
   
   As well as including a number of non-core modules, both of these
  
  
  
  1.1                  modperl-docs/src/docs/1.0/os/win32/distinstall
  
  Index: distinstall
  ===================================================================
  #####################################################################
  # A Perl script to retrieve and join split files 
  # making up a Win32 Perl/Apache binary distribution
  #
  # Files created by hjsplit (http://www.freebyte.com/hjsplit/)
  # with the joining accomplished by hj-join
  #
  # This script is Copyright 2003, by Randy Kobes,
  # and may be distributed under the same terms as Perl itself.
  # Please report problems to Randy Kobes <[EMAIL PROTECTED]>
  #####################################################################
  
  use strict;
  use warnings;
  use Net::FTP;
  use Safe;
  use Digest::MD5;
  use IO::File;
  use ExtUtils::MakeMaker;
  
  die 'This is intended for Win32' unless ($^O =~ /Win32/i);
  
  my $theoryx5 = 'theoryx5.uwinnipeg.ca';
  my $bsize = 102400;
  my $kb = sprintf("%d", $bsize / 1024);
  my $cs = 'CHECKSUMS';
  my $join = 'join32.exe';
  
  print <<"END";
  
  This script will fetch and then join the files needed for 
  creating and installing a Perl/Apache Win32 binary distribution from
    ftp://$theoryx5/pub/other/.
  
  If the file transfer is interrupted before all the neccessary
  files are obtained, run the script again in the same directory;
  files successfully fetched earlier will not be downloaded again.
  
  A hash mark represents transfer of $kb kB.
  
  Available distributions are:
  
  1. Perl 5.8.0 / Apache 2.0.43 / mod_perl 1.99_08
  2. Perl 5.6.1 / Apache 1.3.27 / mod_perl 1.27
  
  END
  
  my $dist;
  my $ans = prompt("Desired distribution (1, 2, or 'q' to quit)?", 1);
  CHECK: {
    ($ans =~ /^q/i) and die 'Installation aborted';
    ($ans == 1) and do {
      $dist = 'Perl-5.8-win32-bin';
      last CHECK;
    };
    ($ans == 2) and do {
      $dist = 'perl-win32-bin';
      last CHECK;
    };
    die 'Please answer either 1, 2, or q';
  }
  
  my $exe = $dist . '.exe';
  
  my $ftp = Net::FTP->new($theoryx5);
  $ftp->login('anonymous', "[EMAIL PROTECTED]")
    or die "Cannot login to $theoryx5";
  $ftp->cwd("pub/other/$dist")
    or die "Cannot cwd to pub/other/$dist";
  
  my $max;
  die "Unable to determine number of files to get" unless ($max = get_max());
  my @files = ();
  
  # fetch the CHECKSUMS file
  print qq{Fetching "$cs" ...};
  $ftp->ascii;
  $ftp->get($cs);
  print " done!\n";
  die qq{Failed to fetch "$cs"} unless (-e $cs);
  push @files, $cs;
  
  # evaluate CHECKSUMS
  my $cksum;
  die qq{Cannot load "$cs" file} unless ($cksum = load_cs($cs) );
  
  $ftp->binary;
  $ftp->hash(1, $bsize);
  
  # fetch the join program
  die qq{Cannot fetch "$join"} unless (fetch($join));
  push @files, $join;
  
  # fetch the split files
  print "\nFetching $max split files ....\n\n"; 
  for (1 .. $max) {
    my $num = $_ < 10 ? "00$_" : "0$_";
    my $file = $dist . '.exe.' . $num;
    push @files, $file;
    die qq{Cannot fetch "$file"} unless (fetch($file));
  }
  print "\nFinished fetching split files.\n";
  $ftp->quit;
  
  # now join them
  if (-e $exe) {
    unlink($exe) or warn qq{Cannot unlink $exe: $!};
  }
  my @args = ($join);
  system(@args);
  die qq{Joining files to create "$exe" failed} unless (-e $exe);
  
  # remove the temporary files, if desired
  $ans = prompt('Remove temporary files?', 'yes');
  if ($ans =~ /^y/i) {
    unlink(@files) or warn "Cannot unlink temporary files: $!\n";
  }
  
  # run the exe, if desired
  $ans = prompt("Run $exe now?", 'yes');
  if ($ans =~ /^y/i) {
     @args = ($exe);
     system(@args);
  }
  else {
     print "\nDouble click on $exe to install.\n";
  }
  
  # fetch a file, unless it exists and the checksum checks
  sub fetch {
    my $file = shift;
    local $| = 1;
    if (-e $file) {
      if (verifyMD5($file)) {
        print qq{Skipping "$file" ...\n};
        return 1;
      }
      else {
        unlink $file or warn qq{Could not unlink "$file"\n};
      }
    }
    my $size = sprintf("%d", $ftp->size($file) / 1024);
    print "\nFetching $file ($size kB) ...\n";
    $ftp->get($file);
    print "Done!\n";
    unless (-e $file) {
      warn qq{Unable to fetch "$file"\n};
      return;
    }
    unless (verifyMD5($file)) {
      print qq{CHECKSUM check for "$file" failed.\n};
      unlink $file or warn qq{Cannot unlink "$file": $!\n};
      return;
    }
    return 1;
  }
  
  # routines to verify the CHECKSUMS for a file
  # adapted from the MD5 check of CPAN.pm
  
  # load the CHECKSUMS file into $cksum
  sub load_cs {
    my $cs = shift;
    my $fh = IO::File->new;
    unless ($fh->open($cs)) {
      warn qq{Could not open "$cs": $!\n};
      return;
    }
    local($/);
    my $eval = <$fh>;
    $fh->close;
    $eval =~ s/\015?\012/\n/g;
    my $comp = Safe->new();
    my $cksum = $comp->reval($eval);
    if ($@) {
      warn qq{eval of "$cs" failed: [EMAIL PROTECTED];
      return;
    }
    return $cksum;
  }
  
  # verify a CHECKSUM for a file
  sub verifyMD5 {
    my $file = shift;
    my ($is, $should);
    my $fh = IO::File->new;
    unless ($fh->open($file)) {
      warn qq{Cannot open "$file": $!};
      return;
    }
    binmode($fh);
    unless ($is = Digest::MD5->new->addfile($fh)->hexdigest) {
      warn qq{Could not compute checksum for "$file": $!};
      $fh->close;
      return;
    }
    $fh->close;
    if ($should = $cksum->{$file}->{md5}) {
      my $test = ($is eq $should);
      printf qq{  Checksum for "$file" is %s\n}, 
        ($test) ? 'OK.' : 'NOT OK.';
      return $test;
    }
    else {
      warn qq{Checksum data for "$file" not present in $cs.\n};
      return;
    }
  }
  
  # get number of split files
  sub get_max {
    my $dir = $ftp->ls();
    my $count = 0;
    foreach (@$dir) {
      $count++ if m!$dist.exe.\d+!;
    }
    return $count;
  }
  
  
  
  1.11      +1 -1      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.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- config.cfg        3 Jan 2003 04:43:05 -0000       1.10
  +++ config.cfg        3 Jan 2003 16:48:43 -0000       1.11
  @@ -17,7 +17,7 @@
   
       copy_glob => [qw(
           mpinstall
  -        get-Perl-5.8-win32-bin
  +        distinstall
       )],
   
       changes => 'Changes.pod',
  
  
  
  1.19      +2 -2      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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- install.pod       2 Jan 2003 21:56:50 -0000       1.18
  +++ install.pod       3 Jan 2003 16:48:43 -0000       1.19
  @@ -222,8 +222,8 @@
   contains this distribution split across multiple files -
   see F<README.join> for instructions on how to join them. Alternatively,
   if you have Perl already, you can get the script
  -F<get-Perl-5.8-win32-bin> which, when invoked as
  -C<perl get-Perl-5.8-win32-bin>, will fetch and join
  +F<distinstall> which, when invoked as
  +C<perl distinstall>, will fetch and join
   the files for you.
   
   =head1 See Also
  
  
  
  1.1                  modperl-docs/src/docs/2.0/os/win32/distinstall
  
  Index: distinstall
  ===================================================================
  #####################################################################
  # A Perl script to retrieve and join split files 
  # making up a Win32 Perl/Apache binary distribution
  #
  # Files created by hjsplit (http://www.freebyte.com/hjsplit/)
  # with the joining accomplished by hj-join
  #
  # This script is Copyright 2003, by Randy Kobes,
  # and may be distributed under the same terms as Perl itself.
  # Please report problems to Randy Kobes <[EMAIL PROTECTED]>
  #####################################################################
  
  use strict;
  use warnings;
  use Net::FTP;
  use Safe;
  use Digest::MD5;
  use IO::File;
  use ExtUtils::MakeMaker;
  
  die 'This is intended for Win32' unless ($^O =~ /Win32/i);
  
  my $theoryx5 = 'theoryx5.uwinnipeg.ca';
  my $bsize = 102400;
  my $kb = sprintf("%d", $bsize / 1024);
  my $cs = 'CHECKSUMS';
  my $join = 'join32.exe';
  
  print <<"END";
  
  This script will fetch and then join the files needed for 
  creating and installing a Perl/Apache Win32 binary distribution from
    ftp://$theoryx5/pub/other/.
  
  If the file transfer is interrupted before all the neccessary
  files are obtained, run the script again in the same directory;
  files successfully fetched earlier will not be downloaded again.
  
  A hash mark represents transfer of $kb kB.
  
  Available distributions are:
  
  1. Perl 5.8.0 / Apache 2.0.43 / mod_perl 1.99_08
  2. Perl 5.6.1 / Apache 1.3.27 / mod_perl 1.27
  
  END
  
  my $dist;
  my $ans = prompt("Desired distribution (1, 2, or 'q' to quit)?", 1);
  CHECK: {
    ($ans =~ /^q/i) and die 'Installation aborted';
    ($ans == 1) and do {
      $dist = 'Perl-5.8-win32-bin';
      last CHECK;
    };
    ($ans == 2) and do {
      $dist = 'perl-win32-bin';
      last CHECK;
    };
    die 'Please answer either 1, 2, or q';
  }
  
  my $exe = $dist . '.exe';
  
  my $ftp = Net::FTP->new($theoryx5);
  $ftp->login('anonymous', "[EMAIL PROTECTED]")
    or die "Cannot login to $theoryx5";
  $ftp->cwd("pub/other/$dist")
    or die "Cannot cwd to pub/other/$dist";
  
  my $max;
  die "Unable to determine number of files to get" unless ($max = get_max());
  my @files = ();
  
  # fetch the CHECKSUMS file
  print qq{Fetching "$cs" ...};
  $ftp->ascii;
  $ftp->get($cs);
  print " done!\n";
  die qq{Failed to fetch "$cs"} unless (-e $cs);
  push @files, $cs;
  
  # evaluate CHECKSUMS
  my $cksum;
  die qq{Cannot load "$cs" file} unless ($cksum = load_cs($cs) );
  
  $ftp->binary;
  $ftp->hash(1, $bsize);
  
  # fetch the join program
  die qq{Cannot fetch "$join"} unless (fetch($join));
  push @files, $join;
  
  # fetch the split files
  print "\nFetching $max split files ....\n\n"; 
  for (1 .. $max) {
    my $num = $_ < 10 ? "00$_" : "0$_";
    my $file = $dist . '.exe.' . $num;
    push @files, $file;
    die qq{Cannot fetch "$file"} unless (fetch($file));
  }
  print "\nFinished fetching split files.\n";
  $ftp->quit;
  
  # now join them
  if (-e $exe) {
    unlink($exe) or warn qq{Cannot unlink $exe: $!};
  }
  my @args = ($join);
  system(@args);
  die qq{Joining files to create "$exe" failed} unless (-e $exe);
  
  # remove the temporary files, if desired
  $ans = prompt('Remove temporary files?', 'yes');
  if ($ans =~ /^y/i) {
    unlink(@files) or warn "Cannot unlink temporary files: $!\n";
  }
  
  # run the exe, if desired
  $ans = prompt("Run $exe now?", 'yes');
  if ($ans =~ /^y/i) {
     @args = ($exe);
     system(@args);
  }
  else {
     print "\nDouble click on $exe to install.\n";
  }
  
  # fetch a file, unless it exists and the checksum checks
  sub fetch {
    my $file = shift;
    local $| = 1;
    if (-e $file) {
      if (verifyMD5($file)) {
        print qq{Skipping "$file" ...\n};
        return 1;
      }
      else {
        unlink $file or warn qq{Could not unlink "$file"\n};
      }
    }
    my $size = sprintf("%d", $ftp->size($file) / 1024);
    print "\nFetching $file ($size kB) ...\n";
    $ftp->get($file);
    print "Done!\n";
    unless (-e $file) {
      warn qq{Unable to fetch "$file"\n};
      return;
    }
    unless (verifyMD5($file)) {
      print qq{CHECKSUM check for "$file" failed.\n};
      unlink $file or warn qq{Cannot unlink "$file": $!\n};
      return;
    }
    return 1;
  }
  
  # routines to verify the CHECKSUMS for a file
  # adapted from the MD5 check of CPAN.pm
  
  # load the CHECKSUMS file into $cksum
  sub load_cs {
    my $cs = shift;
    my $fh = IO::File->new;
    unless ($fh->open($cs)) {
      warn qq{Could not open "$cs": $!\n};
      return;
    }
    local($/);
    my $eval = <$fh>;
    $fh->close;
    $eval =~ s/\015?\012/\n/g;
    my $comp = Safe->new();
    my $cksum = $comp->reval($eval);
    if ($@) {
      warn qq{eval of "$cs" failed: [EMAIL PROTECTED];
      return;
    }
    return $cksum;
  }
  
  # verify a CHECKSUM for a file
  sub verifyMD5 {
    my $file = shift;
    my ($is, $should);
    my $fh = IO::File->new;
    unless ($fh->open($file)) {
      warn qq{Cannot open "$file": $!};
      return;
    }
    binmode($fh);
    unless ($is = Digest::MD5->new->addfile($fh)->hexdigest) {
      warn qq{Could not compute checksum for "$file": $!};
      $fh->close;
      return;
    }
    $fh->close;
    if ($should = $cksum->{$file}->{md5}) {
      my $test = ($is eq $should);
      printf qq{  Checksum for "$file" is %s\n}, 
        ($test) ? 'OK.' : 'NOT OK.';
      return $test;
    }
    else {
      warn qq{Checksum data for "$file" not present in $cs.\n};
      return;
    }
  }
  
  # get number of split files
  sub get_max {
    my $dir = $ftp->ls();
    my $count = 0;
    foreach (@$dir) {
      $count++ if m!$dist.exe.\d+!;
    }
    return $count;
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to