Subject: sup server questions...
To: None <current-users@sun-lamp.cs.berkeley.edu>
From: Luke Mewburn <lm@rmit.edu.au>
List: current-users
Date: 05/24/1994 16:53:09
I've got some (probably very stupid) questions regarding sup & sup
serving.
Currently I'm supping from sun-lamp every day or so onto a local
net.connected machine (`jacana'.) After a successful sup, I
run a script I wrote (attached at the bottom of this message)
to generate a shar file (with the appropriate rm/rmdirs/etc)
to get my tree on my other machine (`karybdis') in sync. This is
because karybdis hasn't been net.connected until now.
So, here's the sequence of events:
(login from karybdis)
jacana% sup -v SUPFILE |& tee log/940524
jacana% sup2shar log/940524 > 940524.diff
jacana% gzip -9 940524.diff
jacana% sz -b 940524.diff.gz
(escape back to karybdis)
karybdis% cd /usr/src/.. # above src/othersrc/doc
karybdis% gzcat 940524.diff.gz | sh
Now, what I want to do is run a sup _server_ on jacana on the tree I
sup from sun-lamp. This server will serve karybdis directly, and
probably some other people (like my friends @telecom/@werj :)
What I want to know is:
- I'm pretty sure that you can serve from a tree you sup from
elsewhere. Can someone give me the some basic instructions on
how to do this.
- the /usr/src on karybdis is my active one, with .o files, etc.
how does sup handle situtations where a directory is removed on
the server, but my directory has some .o & .0 files lying in
there still. Hopefully, quite easily :)
(Here's my script which takes a sup -v logfile and creates a shar file
from it; great for updating a machine over a mail only or floppy only
(you know, take floppy home from work :) link)
--- cut here --- file: sup2shar
#!/usr/bin/perl
#
# sup2shar -
# Parses the output of a sup -v logfile and generates a shell script
# to run on another host containing the commands to get its source
# tree in sync.
#
#
# This program is placed in the public domain, and may be freely used
# with the restriction that this header remains intact, and you do not
# try to claim you wrote this.
#
# Author: Luke Mewburn <lm@rmit.edu.au>
# Date: 940510
# Version: 1.2
#
# 940226, lm - original program
# 940227, lm - added killdir functionalitiy (to clean up objdir symlinks)
# - added file mod time restoration (touch)
# 940311, lm - removed touch
# 940510, lm - added -u.
#
require "getopts.pl";
$progname = $0;
$progname =~ s@.*/@@;
sub usage
{
print <<USAGE;
Usage: $progname [-u] file
parses the output of a 'sup -v logfile' and generates a shar file
containing the commands to get its source tree in sync.
-u `Updating' lines are considered `Receiving' lines.
(when the log file is of a 2nd attempt and you
already had 1/2 the files.)
USAGE
exit 1;
}
&Getopts('u') || &usage();
select(STDERR); $| = 1;
select(STDOUT); $| = 1;
chop($date = `date`);
chop($user = `whoami`);
chop($hostname = `hostname`);
print <<HEADER;
#!/bin/sh
#
# Made $date by $user@$hostname
#
HEADER
print <<'SHFUNCS';
killdir()
{
if [ -e $1/obj ]; then
rm -rf `cd $1/obj;pwd`
fi
rm -rf $1
}
SHFUNCS
MAIN:
while (<>)
{
chop;
next MAIN unless /^SUP /;
if ( /^SUP Backup of/
|| /^SUP Executing/
|| /^SUP Created (\S*)link/
|| /^SUP Deleted symbolic link/
|| /^SUP Removed/ )
{
print STDERR "Unsupported directive: $_\n";
next MAIN;
}
SW:
{
/^SUP Deleted directory (\S*)$/o && do
{
print "echo remove dir $1\n";
print "killdir $1\n";
print STDERR "killdir $1\n";
last SW;
};
/^SUP Deleted file (\S*)$/o && do
{
print "echo rm $1\n";
print "rm $1\n";
print STDERR "rm $1\n";
last SW;
};
/^SUP Created directory (\S*) for (\S*)$/o && do
{
print "echo mkdir $1\n";
print "mkdir $1\n";
print STDERR "mkdir $1\n";
last SW;
};
/^SUP (Receiving|Updating) file (\S*)$/o && do
{
local($func, $file)=($1, $2);
next if (($func eq "Updating") && (! $opt_u));
next unless (-e $file);
print "echo x - $file\n";
print "sed 's/^X//' >$file <<'SHAR_EOF'\n";
system("sed 's/^/X/' $file");
print "SHAR_EOF\n";
print STDERR "-- $file\n";
last SW;
};
} # endSW
}
#
# Messages that we may need to handle from sup -v
#
# Used:
# SUP Deleted directory %s
# SUP Deleted file %s
# SUP Receiving file %s
# SUP Created directory %s for %s
#
# Unused (ignored during parsing):
# SUP Backup of %s created
# SUP Updating file %s
# SUP Executing %s
# SUP Created directory %s\n"
# SUP Updated directory %s\n"
# SUP Created symbolic link %s to %s
# SUP Created %slink %s to %s
# SUP Deleted symbolic link %s
# SUP Removed %s %s
#
--- cut here ---
------------------------------------------------------------------------------