358 lines
8.9 KiB
Perl
358 lines
8.9 KiB
Perl
#!/usr/bin/perl
|
|
|
|
#
|
|
# $Id: disttools.pl,v 1.1 2004/03/15 20:35:27 as Exp $
|
|
#
|
|
# $Log: disttools.pl,v $
|
|
# Revision 1.1 2004/03/15 20:35:27 as
|
|
# added files from freeswan-2.04-x509-1.5.3
|
|
#
|
|
# Revision 1.13 2003/06/17 22:30:06 build
|
|
# adjusted userid to pick
|
|
# use key that is offline.
|
|
#
|
|
# Revision 1.12 2002/09/30 16:02:17 mcr
|
|
# added handling for date stamp.
|
|
#
|
|
# Revision 1.11 2002/08/30 01:30:25 mcr
|
|
# changed code to write maintain local copy of FTP site,
|
|
# and rsync things up when needed.
|
|
#
|
|
# Revision 1.10 2002/07/29 05:13:33 mcr
|
|
# append .gz to patch files before they are signed.
|
|
#
|
|
# Revision 1.9 2002/07/29 04:02:21 mcr
|
|
# removed errant ) from tar copy line.
|
|
#
|
|
# Revision 1.8 2002/07/29 03:57:59 mcr
|
|
# produce kernel patches as part of the snapshots, candidates
|
|
# and releases.
|
|
#
|
|
# Revision 1.7 2002/06/07 18:23:49 mcr
|
|
# adjusted sendfiles to use tar to copy rather than scp.
|
|
# mkcand now prints usage if you don't give it enough arguments.
|
|
# It also now updates the "CANDIDATE" symlink.
|
|
# mksnap properly quotes the wildcards in the -name for find.
|
|
#
|
|
# Revision 1.6 2002/06/03 03:10:58 mcr
|
|
# "upload" now takes argument to indicate name to
|
|
# install/upload for the symlink.
|
|
#
|
|
# Revision 1.5 2002/06/03 02:19:40 mcr
|
|
# fixed bug in datelettername() - y/sed was not applied to $let,
|
|
# but to $_.
|
|
#
|
|
# Revision 1.4 2002/06/03 02:14:16 mcr
|
|
# die statements are now numbered for easier backtracking.
|
|
# candidate checks are now done if $candidate arg=1: edit README
|
|
# and CHANGES file for mkcand.
|
|
#
|
|
# Revision 1.3 2002/05/30 23:24:22 mcr
|
|
# working "mksnap" and disttools.pl.
|
|
#
|
|
# Revision 1.2 2002/05/30 22:20:56 mcr
|
|
# initial debugging done.
|
|
#
|
|
# Revision 1.1 2002/05/30 21:24:00 mcr
|
|
# perl-ified mksnap.
|
|
#
|
|
#
|
|
|
|
@supportedkernels=("2.0", "2.2", "2.4");
|
|
|
|
sub nicesystem {
|
|
if($debug) {
|
|
print STDERR "System: ",join(' ',@_)."\n";
|
|
}
|
|
system(@_);
|
|
if($? == 0) {
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
sub kpatchname {
|
|
local($pkgname, $ver)=@_;
|
|
local($name);
|
|
|
|
$name = $pkgname.".k".$ver.".patch";
|
|
return $name;
|
|
}
|
|
|
|
|
|
sub datelettername {
|
|
@MoY = ('jan','feb','mar','apr','may','jun',
|
|
'jul','aug','sep','oct','nov','dec');
|
|
|
|
$letters="abcdefghjklmnpqrstuvwxyz";
|
|
|
|
($sec, $min, $hour, $mday, $mon, $year) = gmtime(time);
|
|
|
|
$let=substr($letters, $hour-1, 1);
|
|
if($min >= 30) {
|
|
$let =~ y/a-z/A-Z/;
|
|
}
|
|
|
|
if($year < 1900) {
|
|
$year += 1900;
|
|
}
|
|
|
|
$ver=sprintf("%04d%s%02d%s", $year, $MoY[$mon], $mday, $let);
|
|
$ver;
|
|
}
|
|
|
|
sub snapname {
|
|
local($prefix)=@_;
|
|
$snapname=$prefix.&datelettername;
|
|
$snapname;
|
|
}
|
|
|
|
sub suckvars {
|
|
$envvar=$ENV{'HOME'}."/freeswan-regress-env.sh";
|
|
|
|
if(-f $envvar) {
|
|
|
|
open(SHVARS, $envvar) || die "001: Can not open $envvar: $!\n";
|
|
while(<SHVARS>) {
|
|
chop;
|
|
next if (/^\#/);
|
|
|
|
if(/(\S+)\=(\S+)/) {
|
|
$var=$1;
|
|
$value=$2;
|
|
|
|
$ENV{$var}=$value;
|
|
}
|
|
}
|
|
close(SHVARS);
|
|
}
|
|
}
|
|
|
|
sub defvar {
|
|
local($var,$value)=@_;
|
|
|
|
if(!defined($ENV{$var})) {
|
|
$ENV{$var}=$value;
|
|
}
|
|
}
|
|
|
|
sub defvars {
|
|
&defvar('BTMP', '/btmp');
|
|
if($ENV{'DEBUGFREESWANDIST'}) {
|
|
$debug=$ENV{'DEBUGFREESWANDIST'};
|
|
}
|
|
}
|
|
|
|
sub setuppgp {
|
|
local($lastrel)=@_;
|
|
|
|
$lastrel =~ y/\./\_/;
|
|
|
|
$ENV{'PGPPATH'}=$ENV{'SNAPSHOTSIGDIR'}."/BASEPRE$lastrel";
|
|
$ENV{'PGPNAME'}="build+snap".$lastrel."\@freeswan.org";
|
|
}
|
|
|
|
sub dopgpsig {
|
|
local($pkgname)=@_;
|
|
|
|
local($tarfile);
|
|
$tarfile=$pkgname.".tar";
|
|
|
|
$userid=$ENV{'PGPNAME'};
|
|
&nicesystem("pgp -sba $tarfile.gz -u $userid -o $tarfile.gz.sig") || die "002: PGP failed: $?\n";
|
|
&nicesystem("chmod a+r $tarfile.gz.sig");
|
|
|
|
foreach $ver (@supportedkernels) {
|
|
$file=&kpatchname($pkgname,$ver).".gz";
|
|
&nicesystem("pgp -sba $file -u $userid -o $file.sig") || die "002: PGP failed: $?\n";
|
|
&nicesystem("chmod a+r $file.sig");
|
|
}
|
|
}
|
|
|
|
|
|
# this function now does two things:
|
|
# 1) makes the tar file of old
|
|
# 2) makes the kernel patch file of new.
|
|
#
|
|
|
|
sub makedisttarfile {
|
|
local($tmpdir, $pkgname, $vername, $dirname, $date, $relopt, $candidate)=@_;
|
|
local($file);
|
|
|
|
&nicesystem("mkdir -p $tmpdir") || die "003: Can not mkdir $tmpdir\n";
|
|
chdir($tmpdir) || die "004: makedisttarfile: Can not chdir to $tmpdir\n";
|
|
|
|
# nuke anything that was there before
|
|
&nicesystem("rm -rf $dirname");
|
|
|
|
if(defined($date) && $date ne '') {
|
|
$minusD="-D \"${date}\"";
|
|
}
|
|
|
|
print "cvs -Q export $minusD ${relopt} -d ${dirname} freeswan\n";
|
|
|
|
&nicesystem("cvs -Q export $minusD ${relopt} -d ${dirname} freeswan") || die "005: CVS failed!\n";
|
|
|
|
chdir($dirname) || die "006: Can not chdir to $dirname\n";
|
|
|
|
open(VERSIONFILE, ">Makefile.ver") || die "007: failed to open Makefile.ver\n";
|
|
print VERSIONFILE "IPSECVERSION=".$vername."\n";
|
|
close(VERSIONFILE);
|
|
|
|
if($candidate) {
|
|
open(README, "README") || die "008: Can not edit README: $!\n";
|
|
$nreadme="README.$$";
|
|
open(NREADME, ">$nreadme") || die "009: Can not write README: $!\n";
|
|
$lines=1;
|
|
while(<README>) {
|
|
if($lines == 1) {
|
|
s/xxx/$vername/;
|
|
}
|
|
# if(/^---$/) {
|
|
# print STDERR "README not ready, run prepcand first\n";
|
|
# die;
|
|
# }
|
|
$lines++;
|
|
print NREADME;
|
|
}
|
|
close(NREADME);
|
|
close(README);
|
|
unlink("README") || die "010: Can not remove README: $!\n";
|
|
rename("$nreadme", "README") || die "011: Can not rename $nreadme to README: $!\n";
|
|
|
|
# now edit CHANGES file
|
|
open(CHANGES, "CHANGES") || die "012: Can not edit README: $!\n";
|
|
$nchanges="CHANGES.$$";
|
|
open(NCHANGES,">$nchanges") || die "013: Can not write README: $!\n";
|
|
$lines=1;
|
|
while(<CHANGES>) {
|
|
if($lines == 1) {
|
|
if(/since last release/) {
|
|
die "CHANGES not ready, run prepcand first";
|
|
}
|
|
s/xxx/$vername/;
|
|
}
|
|
$lines++;
|
|
print NCHANGES;
|
|
}
|
|
close(NCHANGES);
|
|
close(CHANGES);
|
|
unlink("CHANGES") || die "014: Can not remove CHANGES: $!\n";
|
|
rename("$nchanges", "CHANGES") || die "015: Can not rename $nreadme to README: $!\n";
|
|
}
|
|
|
|
&nicesystem("make -f dtrmakefile -s snapready") || die "016: failed to make snapshot ready for distribution: $?\n";
|
|
|
|
chdir("..") || die "017: failed to go to parent dir: $!\n";
|
|
|
|
unlink("$pkgname.tar");
|
|
unlink("$pkgname.tar.gz");
|
|
unlink("$pkgname.tar.gz.md5");
|
|
|
|
&nicesystem("tar -cf $pkgname.tar $dirname") || die "018: Failed to tar file: $?\n";
|
|
|
|
# make the kernelpatch for each of 2.0, 2.2, and 2.4.
|
|
foreach $ver (@supportedkernels) {
|
|
$file=&kpatchname($pkgname,$ver);
|
|
&nicesystem("make -C $dirname kernelpatch$ver >$file");
|
|
&nicesystem("gzip -9 $file");
|
|
}
|
|
|
|
&nicesystem("rm -rf $dirname") || warn "failed to cleanup $dirname\n";
|
|
|
|
&nicesystem("gzip -9 $pkgname.tar") || die "019: gzip died: $?\n";
|
|
|
|
&nicesystem("ls -l $pkgname.tar.gz");
|
|
|
|
&nicesystem("md5sum $pkgname.tar.gz >$pkgname.tar.gz.md5");
|
|
&nicesystem("chmod a+r $pkgname.tar.gz");
|
|
}
|
|
|
|
sub sendfiles {
|
|
local(@thefiles)=@_;
|
|
|
|
local($file, $localroot);
|
|
|
|
if($ENV{'DEV_DIR'}) { $localroot=$ENV{'DEV_DIR'}; } else { $localroot=$ENV{'LOCAL_ARCHIVE'}; }
|
|
|
|
foreach $file (@thefiles) {
|
|
$dir=$file;
|
|
if(!($dir =~ s,(.*)/([^/]*),\1,)) {
|
|
$dir=".";
|
|
} else {
|
|
$file=$2;
|
|
}
|
|
|
|
&nicesystem("tar -C $dir -c -f - $file | tar -C ${localroot} -x -f -");
|
|
}
|
|
}
|
|
|
|
|
|
sub remotecmd {
|
|
local($cmd)=@_;
|
|
|
|
$distuser=$ENV{'DISTUSER'};
|
|
$disthost=$ENV{'DISTHOST'};
|
|
$distdir =$ENV{'DISTDIR'};
|
|
$ssh =$ENV{'ssh'};
|
|
|
|
&nicesystem("$ssh -l $distuser $disthost '$cmd'");
|
|
}
|
|
|
|
|
|
sub upload {
|
|
local($pkgname, $symlinkname)=@_;
|
|
|
|
local($localroot);
|
|
|
|
if($ENV{'DEV_DIR'}) { $localroot=$ENV{'DEV_DIR'}; } else { $localroot=$ENV{'LOCAL_ARCHIVE'}; }
|
|
|
|
&sendfiles("$pkgname.tar.gz",
|
|
"$pkgname.tar.gz.sig",
|
|
"$pkgname.tar.gz.md5");
|
|
|
|
foreach $ver (@supportedkernels) {
|
|
$file=&kpatchname($pkgname,$ver).".gz";
|
|
&sendfiles($file, "$file.sig");
|
|
}
|
|
|
|
if(defined($symlinkname)) {
|
|
&sendfiles($symlinkname.".tar.gz.md5");
|
|
&nicesystem("cd $localroot && ln -f -s $pkgname.tar.gz $symlinkname.tar.gz && ln -f -s $pkgname.tar.gz.sig $symlinkname.tar.gz.sig");
|
|
|
|
foreach $ver (@supportedkernels) {
|
|
$file=&kpatchname($pkgname,$ver);
|
|
$newname=&kpatchname($symlinkname,$ver);
|
|
&nicesystem("cd $localroot && ln -f -s $file.gz $newname.gz && ln -f -s $file.gz.sig $newname.gz.sig");
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
sub upsync {
|
|
|
|
local($localroot, $distuser, $disthost, $distdir, $spoolhost, $spooluser);
|
|
local($masterhost, $masteruser, $masterdir);
|
|
|
|
$localroot=$ENV{'LOCAL_ARCHIVE'};
|
|
$distuser=$ENV{'DISTUSER'};
|
|
$disthost=$ENV{'DISTHOST'};
|
|
$distdir =$ENV{'DISTDIR'};
|
|
$ssh =$ENV{'ssh'};
|
|
$masterhost = $ENV{'MASTERHOST'};
|
|
$masteruser = $ENV{'MASTERUSER'};
|
|
$masterdir = $ENV{'MASTERDIR'};
|
|
|
|
# sync stuff to distribution site.
|
|
&nicesystem("rsync -e $ssh -r --delete -a -v -c $localroot/ $masteruser\@$masterhost:$masterdir/");
|
|
|
|
# sync stuff to xs4all site.
|
|
&nicesystem(print "rsync -e $ssh -r --delete -a -v -c $localroot/ $distuser\@$disthost:$distdir/");
|
|
&nicesystem("rsync -e $ssh -r --delete -a -v -c $localroot/ $distuser\@$disthost:$distdir/");
|
|
|
|
}
|
|
|
|
1;
|
|
|