]> git.ipfire.org Git - people/ms/strongswan.git/blob - packaging/utils/disttools.pl
- import of strongswan-2.7.0
[people/ms/strongswan.git] / packaging / utils / disttools.pl
1 #!/usr/bin/perl
2
3 #
4 # $Id: disttools.pl,v 1.1 2004/03/15 20:35:27 as Exp $
5 #
6 # $Log: disttools.pl,v $
7 # Revision 1.1 2004/03/15 20:35:27 as
8 # added files from freeswan-2.04-x509-1.5.3
9 #
10 # Revision 1.13 2003/06/17 22:30:06 build
11 # adjusted userid to pick
12 # use key that is offline.
13 #
14 # Revision 1.12 2002/09/30 16:02:17 mcr
15 # added handling for date stamp.
16 #
17 # Revision 1.11 2002/08/30 01:30:25 mcr
18 # changed code to write maintain local copy of FTP site,
19 # and rsync things up when needed.
20 #
21 # Revision 1.10 2002/07/29 05:13:33 mcr
22 # append .gz to patch files before they are signed.
23 #
24 # Revision 1.9 2002/07/29 04:02:21 mcr
25 # removed errant ) from tar copy line.
26 #
27 # Revision 1.8 2002/07/29 03:57:59 mcr
28 # produce kernel patches as part of the snapshots, candidates
29 # and releases.
30 #
31 # Revision 1.7 2002/06/07 18:23:49 mcr
32 # adjusted sendfiles to use tar to copy rather than scp.
33 # mkcand now prints usage if you don't give it enough arguments.
34 # It also now updates the "CANDIDATE" symlink.
35 # mksnap properly quotes the wildcards in the -name for find.
36 #
37 # Revision 1.6 2002/06/03 03:10:58 mcr
38 # "upload" now takes argument to indicate name to
39 # install/upload for the symlink.
40 #
41 # Revision 1.5 2002/06/03 02:19:40 mcr
42 # fixed bug in datelettername() - y/sed was not applied to $let,
43 # but to $_.
44 #
45 # Revision 1.4 2002/06/03 02:14:16 mcr
46 # die statements are now numbered for easier backtracking.
47 # candidate checks are now done if $candidate arg=1: edit README
48 # and CHANGES file for mkcand.
49 #
50 # Revision 1.3 2002/05/30 23:24:22 mcr
51 # working "mksnap" and disttools.pl.
52 #
53 # Revision 1.2 2002/05/30 22:20:56 mcr
54 # initial debugging done.
55 #
56 # Revision 1.1 2002/05/30 21:24:00 mcr
57 # perl-ified mksnap.
58 #
59 #
60
61 @supportedkernels=("2.0", "2.2", "2.4");
62
63 sub nicesystem {
64 if($debug) {
65 print STDERR "System: ",join(' ',@_)."\n";
66 }
67 system(@_);
68 if($? == 0) {
69 return 1;
70 } else {
71 return 0;
72 }
73 }
74
75 sub kpatchname {
76 local($pkgname, $ver)=@_;
77 local($name);
78
79 $name = $pkgname.".k".$ver.".patch";
80 return $name;
81 }
82
83
84 sub datelettername {
85 @MoY = ('jan','feb','mar','apr','may','jun',
86 'jul','aug','sep','oct','nov','dec');
87
88 $letters="abcdefghjklmnpqrstuvwxyz";
89
90 ($sec, $min, $hour, $mday, $mon, $year) = gmtime(time);
91
92 $let=substr($letters, $hour-1, 1);
93 if($min >= 30) {
94 $let =~ y/a-z/A-Z/;
95 }
96
97 if($year < 1900) {
98 $year += 1900;
99 }
100
101 $ver=sprintf("%04d%s%02d%s", $year, $MoY[$mon], $mday, $let);
102 $ver;
103 }
104
105 sub snapname {
106 local($prefix)=@_;
107 $snapname=$prefix.&datelettername;
108 $snapname;
109 }
110
111 sub suckvars {
112 $envvar=$ENV{'HOME'}."/freeswan-regress-env.sh";
113
114 if(-f $envvar) {
115
116 open(SHVARS, $envvar) || die "001: Can not open $envvar: $!\n";
117 while(<SHVARS>) {
118 chop;
119 next if (/^\#/);
120
121 if(/(\S+)\=(\S+)/) {
122 $var=$1;
123 $value=$2;
124
125 $ENV{$var}=$value;
126 }
127 }
128 close(SHVARS);
129 }
130 }
131
132 sub defvar {
133 local($var,$value)=@_;
134
135 if(!defined($ENV{$var})) {
136 $ENV{$var}=$value;
137 }
138 }
139
140 sub defvars {
141 &defvar('BTMP', '/btmp');
142 if($ENV{'DEBUGFREESWANDIST'}) {
143 $debug=$ENV{'DEBUGFREESWANDIST'};
144 }
145 }
146
147 sub setuppgp {
148 local($lastrel)=@_;
149
150 $lastrel =~ y/\./\_/;
151
152 $ENV{'PGPPATH'}=$ENV{'SNAPSHOTSIGDIR'}."/BASEPRE$lastrel";
153 $ENV{'PGPNAME'}="build+snap".$lastrel."\@freeswan.org";
154 }
155
156 sub dopgpsig {
157 local($pkgname)=@_;
158
159 local($tarfile);
160 $tarfile=$pkgname.".tar";
161
162 $userid=$ENV{'PGPNAME'};
163 &nicesystem("pgp -sba $tarfile.gz -u $userid -o $tarfile.gz.sig") || die "002: PGP failed: $?\n";
164 &nicesystem("chmod a+r $tarfile.gz.sig");
165
166 foreach $ver (@supportedkernels) {
167 $file=&kpatchname($pkgname,$ver).".gz";
168 &nicesystem("pgp -sba $file -u $userid -o $file.sig") || die "002: PGP failed: $?\n";
169 &nicesystem("chmod a+r $file.sig");
170 }
171 }
172
173
174 # this function now does two things:
175 # 1) makes the tar file of old
176 # 2) makes the kernel patch file of new.
177 #
178
179 sub makedisttarfile {
180 local($tmpdir, $pkgname, $vername, $dirname, $date, $relopt, $candidate)=@_;
181 local($file);
182
183 &nicesystem("mkdir -p $tmpdir") || die "003: Can not mkdir $tmpdir\n";
184 chdir($tmpdir) || die "004: makedisttarfile: Can not chdir to $tmpdir\n";
185
186 # nuke anything that was there before
187 &nicesystem("rm -rf $dirname");
188
189 if(defined($date) && $date ne '') {
190 $minusD="-D \"${date}\"";
191 }
192
193 print "cvs -Q export $minusD ${relopt} -d ${dirname} freeswan\n";
194
195 &nicesystem("cvs -Q export $minusD ${relopt} -d ${dirname} freeswan") || die "005: CVS failed!\n";
196
197 chdir($dirname) || die "006: Can not chdir to $dirname\n";
198
199 open(VERSIONFILE, ">Makefile.ver") || die "007: failed to open Makefile.ver\n";
200 print VERSIONFILE "IPSECVERSION=".$vername."\n";
201 close(VERSIONFILE);
202
203 if($candidate) {
204 open(README, "README") || die "008: Can not edit README: $!\n";
205 $nreadme="README.$$";
206 open(NREADME, ">$nreadme") || die "009: Can not write README: $!\n";
207 $lines=1;
208 while(<README>) {
209 if($lines == 1) {
210 s/xxx/$vername/;
211 }
212 # if(/^---$/) {
213 # print STDERR "README not ready, run prepcand first\n";
214 # die;
215 # }
216 $lines++;
217 print NREADME;
218 }
219 close(NREADME);
220 close(README);
221 unlink("README") || die "010: Can not remove README: $!\n";
222 rename("$nreadme", "README") || die "011: Can not rename $nreadme to README: $!\n";
223
224 # now edit CHANGES file
225 open(CHANGES, "CHANGES") || die "012: Can not edit README: $!\n";
226 $nchanges="CHANGES.$$";
227 open(NCHANGES,">$nchanges") || die "013: Can not write README: $!\n";
228 $lines=1;
229 while(<CHANGES>) {
230 if($lines == 1) {
231 if(/since last release/) {
232 die "CHANGES not ready, run prepcand first";
233 }
234 s/xxx/$vername/;
235 }
236 $lines++;
237 print NCHANGES;
238 }
239 close(NCHANGES);
240 close(CHANGES);
241 unlink("CHANGES") || die "014: Can not remove CHANGES: $!\n";
242 rename("$nchanges", "CHANGES") || die "015: Can not rename $nreadme to README: $!\n";
243 }
244
245 &nicesystem("make -f dtrmakefile -s snapready") || die "016: failed to make snapshot ready for distribution: $?\n";
246
247 chdir("..") || die "017: failed to go to parent dir: $!\n";
248
249 unlink("$pkgname.tar");
250 unlink("$pkgname.tar.gz");
251 unlink("$pkgname.tar.gz.md5");
252
253 &nicesystem("tar -cf $pkgname.tar $dirname") || die "018: Failed to tar file: $?\n";
254
255 # make the kernelpatch for each of 2.0, 2.2, and 2.4.
256 foreach $ver (@supportedkernels) {
257 $file=&kpatchname($pkgname,$ver);
258 &nicesystem("make -C $dirname kernelpatch$ver >$file");
259 &nicesystem("gzip -9 $file");
260 }
261
262 &nicesystem("rm -rf $dirname") || warn "failed to cleanup $dirname\n";
263
264 &nicesystem("gzip -9 $pkgname.tar") || die "019: gzip died: $?\n";
265
266 &nicesystem("ls -l $pkgname.tar.gz");
267
268 &nicesystem("md5sum $pkgname.tar.gz >$pkgname.tar.gz.md5");
269 &nicesystem("chmod a+r $pkgname.tar.gz");
270 }
271
272 sub sendfiles {
273 local(@thefiles)=@_;
274
275 local($file, $localroot);
276
277 if($ENV{'DEV_DIR'}) { $localroot=$ENV{'DEV_DIR'}; } else { $localroot=$ENV{'LOCAL_ARCHIVE'}; }
278
279 foreach $file (@thefiles) {
280 $dir=$file;
281 if(!($dir =~ s,(.*)/([^/]*),\1,)) {
282 $dir=".";
283 } else {
284 $file=$2;
285 }
286
287 &nicesystem("tar -C $dir -c -f - $file | tar -C ${localroot} -x -f -");
288 }
289 }
290
291
292 sub remotecmd {
293 local($cmd)=@_;
294
295 $distuser=$ENV{'DISTUSER'};
296 $disthost=$ENV{'DISTHOST'};
297 $distdir =$ENV{'DISTDIR'};
298 $ssh =$ENV{'ssh'};
299
300 &nicesystem("$ssh -l $distuser $disthost '$cmd'");
301 }
302
303
304 sub upload {
305 local($pkgname, $symlinkname)=@_;
306
307 local($localroot);
308
309 if($ENV{'DEV_DIR'}) { $localroot=$ENV{'DEV_DIR'}; } else { $localroot=$ENV{'LOCAL_ARCHIVE'}; }
310
311 &sendfiles("$pkgname.tar.gz",
312 "$pkgname.tar.gz.sig",
313 "$pkgname.tar.gz.md5");
314
315 foreach $ver (@supportedkernels) {
316 $file=&kpatchname($pkgname,$ver).".gz";
317 &sendfiles($file, "$file.sig");
318 }
319
320 if(defined($symlinkname)) {
321 &sendfiles($symlinkname.".tar.gz.md5");
322 &nicesystem("cd $localroot && ln -f -s $pkgname.tar.gz $symlinkname.tar.gz && ln -f -s $pkgname.tar.gz.sig $symlinkname.tar.gz.sig");
323
324 foreach $ver (@supportedkernels) {
325 $file=&kpatchname($pkgname,$ver);
326 $newname=&kpatchname($symlinkname,$ver);
327 &nicesystem("cd $localroot && ln -f -s $file.gz $newname.gz && ln -f -s $file.gz.sig $newname.gz.sig");
328 }
329
330 }
331 }
332
333 sub upsync {
334
335 local($localroot, $distuser, $disthost, $distdir, $spoolhost, $spooluser);
336 local($masterhost, $masteruser, $masterdir);
337
338 $localroot=$ENV{'LOCAL_ARCHIVE'};
339 $distuser=$ENV{'DISTUSER'};
340 $disthost=$ENV{'DISTHOST'};
341 $distdir =$ENV{'DISTDIR'};
342 $ssh =$ENV{'ssh'};
343 $masterhost = $ENV{'MASTERHOST'};
344 $masteruser = $ENV{'MASTERUSER'};
345 $masterdir = $ENV{'MASTERDIR'};
346
347 # sync stuff to distribution site.
348 &nicesystem("rsync -e $ssh -r --delete -a -v -c $localroot/ $masteruser\@$masterhost:$masterdir/");
349
350 # sync stuff to xs4all site.
351 &nicesystem(print "rsync -e $ssh -r --delete -a -v -c $localroot/ $distuser\@$disthost:$distdir/");
352 &nicesystem("rsync -e $ssh -r --delete -a -v -c $localroot/ $distuser\@$disthost:$distdir/");
353
354 }
355
356 1;
357