diff options
Diffstat (limited to 'packaging/utils/disttools.pl')
-rw-r--r-- | packaging/utils/disttools.pl | 357 |
1 files changed, 357 insertions, 0 deletions
diff --git a/packaging/utils/disttools.pl b/packaging/utils/disttools.pl new file mode 100644 index 000000000..4ea8db61d --- /dev/null +++ b/packaging/utils/disttools.pl @@ -0,0 +1,357 @@ +#!/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; + |