aboutsummaryrefslogtreecommitdiffstats
path: root/packaging/utils/disttools.pl
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/utils/disttools.pl')
-rw-r--r--packaging/utils/disttools.pl357
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;
+