
I did some serious bug fixing and minor hacking to get pmake 2.1 to
run as reliably as possible in the computing environment at ICSI
(60+ Sparc machines, some old Sun3's, a NeXT, and a small cluster of 
DECstations).

Major additions and changes include

o	In a typical NFS environment using an automounter, path names
	will not be identical all over the net, but one can set things up
	so everybody can access the same file using a `standard' path.
	customslib.c now has a function Customs_NormPath() that
	normalizes a pathname prior to exportation.  This will have to
	be customized to the local environment.

o	The availability index computation was changed to be more realistic.
	Rather than combining all criteria into a magic number, we are only
	interested in the load and the relative speed of the machine as
	long as all other criteria are within their allowed ranges.
	The index is simply the load that is `left' (max - current),
	times the relative speed (say MIPS), divided by the number of
	currently imported jobs.

o	The os-dependent code was extended to support the new machines.
	It is now more robust in case some of the information can not be
	obtained (e.g., when debugging as non-root).
	Importquota shows only the criteria actually available to the system.

o	Several problems with byte-ordering surfaced as I ported the system
	to the DEC environment.  These are believed to be all fixed now.

o	Code cleaned up in several places. Avoid conflicts with system
	header files and library functions. Exit with proper status.
	Make sure event handler functions get all the arguments they are
	supposed to. Customs and its clients (except pmake) now use
	xmalloc() instead of malloc() to avoid bad things in case
	virtual memory runs out.  After all, customs runs as root so we better
	make sure there are no nasty surprises.

o	Pmake exit handling (lock file removal) didn't work on non-Sun
	systems.

o	A bad bug in the RPC system caused timeouts on long messages sent via
	TCP.

o	A work-around that really shouldn't be necessary to avoid losing stderr
	output from remote jobs on non-Sun systems.

o	Logd didn't work at all because of an incompatible data structure for
	the information given out by the MCAInfo RPC.

o	Reginfo got a nicer output format.

o	Makefiles were improved (but are still dependent on the compilation
	and installation environment).  Compiler and options are now selected
	to be `best' for each machine.

Details of all these changes can be found in the RCS directories.

Andreas Stolcke
stolcke@icsi.berkeley.edu
7/31/91


*** Patchlevel 4 ***

o	customs.conf script to generate startup flags automatically.
	Very site and machine specific, though.

o	Guard against process table overflow on target host using a new
	availability parameter `minimum no. of free process slots'.

o	Propagate process priorities and resource limits to exported job.

o	Implement CPU time limits for imported jobs.

o	Fixed SIGINT and SIGQUIT passing to remote jobs.

o	Allow remote killing of all imported jobs (cctrl -kill).

o	Check passwd entry before allowing job imports.

A. Stolcke
2/18/92


*** Patchlevel 6 ***

o	-nice options for customs and importquota to run all imported jobs
	at lower priority.

o	The pmake.1 man page is now generated with Sprite man macros inserted
	automatically.

o	-idle and -cpu flags now allow time specs greater than 60 minutes.

o	New -help, -quiet and -default options for importquota.

o	Made malloc() used by liblst more secure (like xmalloc()).

o	Found and fixed one tricky source of core dumps in pmake.

o	Fixed kernel symbol names so os-bsd.c works on HP/UX.

o	Pmake support for Common Archive Format (e.g., HP/UX) added
	(see AR_COMMON in unix/config.h).

o	Pmake interprets negative -L arguments as preference for local
	execution.  Can be used to force a certain number of local jobs.

o	Fixed handling of SIGTTIN/SIGTTOU in export.  

o	Support active jobs eviction added (-evict flag).

o	Improved tracking of job status (stopped, signalled, continued)
	in pmake, including remote jobs.

o	Fixed a bug with bogus host handling in customs that could cause
	reginfo to core dump.

o	Fake a non-zero load value if load cannot be obtained from OS.
	Results in better spread of allocated hosts.

o	Can now deliver uncatchable signals (SIGCONT, SIGKILL) to remote
	jobs without killing customs child daemon (so we get status
	change reported back).

o	Allow for tighter security by restricting critical RPCs to 
	reserved ports (see remarks in SECURITY file).

A. Stolcke, 4/11/92


*** Patchlevel 7 ***

o	Added Customs_Port() to customslib for gnumake.

o	Use caller address to authenticate a Import_Kill.  This allows
	export in slave mode to send signals.

o	Make Customs_NormPath() a noop if ORIG_CWD is defined (so
	can be called regardless of local ORIG_CWD setting).

o	Include patch for GNU make 3.62 Customs support.  Also link
	export statically on Suns to speed things up a bit.

o	Use OPTIMIZE macro to customize CFLAGS in Makefiles (see config.mk).

o	Avoid problems with desynchronized clocks by transmitting elapsed
	job run time instead of start time to cctrl -jobs.

o	Fixed some inaccuracies and omissions in the INSTALL instructions.

A. Stolcke, 4/21/92


*** Patchlevel 8 ***

o	All customs error logging done via xlog(). Allows routing to
	file or syslog(3).

A. Stolcke, 7/1/92


*** Patchlevel 9 ***

NOTE: The first four fixes below address various problems that have caused
seemingly random failures, hanging, and core dumps of PMake under
typically heavy load.  Taken together, they have significantly increased
the robustness of Pmake in my experience.

o	PMake: Fixed some bugs with tracking of remote jobs: queue corruption
	could lead to core dumps, "exits from unknown jobs".
	Also added new queue debugging mode (-d q) to help with future trouble.

o	Customs: Doublecheck import timeouts on the server side to prevent
	duplicate job creation and other bad things.  Cf. DOUBLECHECK_TIMEOUT
	in config.h.
	NOTE: This new feature uses an incompatible change in the import
	protocol.  Both customs and client programs have to be reinstalled
	and restarted.

o	PMake: Check that pipe() doesn't run out of file descriptors.
	Can result in major screwup in RPC module when handling remote
	streams!

o	Fix fileno() macro to prevent lossage with file numbers > 127.
	Cf. redefinition at the bottom of unix/config.h.

o	PMake: Fixed a bug with suid-ness that would initialize the
	directory cache before reverting to user's uid.
    
o	Customs: Cleaned up some of the syslogging related to imports.
	More info on security breaches. Log common, unavoidable errors
	as `warnings'.

o	Customs: For ps(1)'s benefit, set process title of child daemon to
	job id.

o	Customs: Detect and warn about reginfo exceeding max RPC size.

o	RPC: Check socket arguments for sanity.

A. Stolcke, 7/23/92


*** Patchlevel 10 ***

o	Customs: log evictions.

o	Customs: kill orphans in process group of imported job.  Also
	counteracts deliberate evasion of the eviction mechanism.

o	Reginfo: allow hostname specification other than localhost, so
	other customs networks can be monitored remotely.

o	PMake: allow runtime control over rechecking strategy (new -R
	option).  Be smart and recheck only locally created targets by
	default.

o	PMake: enable -x option (used to be ignored, even in Make mode
	where it is useful).

o	PMake: prevent endless loops when -L 0 is specified and nothing
	can be exported.

A. Stolcke, 7/30/92


*** Patchlevel 11 ***

o	RPC: make sure Rpc_Return() byte swaps its own data, not the
	caller's.  This could mess up customs on certain RPC calls
	from machines with different byte order.

o	Customs: catch and log termination signals.

o	Cctrl: new -port options to select non-default port/service.

A. Stolcke, 7/31/92


*** Patchlevel 12 ***

o	Reginfo: less redundant, columnized output.

o	Customs: link with -n to free up binary on diskless clients.

o	Need -DSYSV in hpux CFLAGS in makefile.

o	Customs: Now has full support for preserving resource limits in HP-UX.
	(Not very useful unless you have a shell that supports them too.)

o	Logd: man page added courtesy of <chicken@npac.syr.edu>.

o	PMake: Fixed glitch in HP-UX setuid() use that prevented uid
	switching from working when installed suid root.

o	PMake (system mk file): Use /bin/sh5 on ultrix system, where
	/bin/sh error control is broken.
	
The following are small compatibility fixes so as to make PMake
more like UNIX make and/or gnumake in cases where no conflict with
PMake enhancements ensues.

o	PMake: Ignore all dot targets when searching for a default target.
	A dot target is one starting with `.' and not containing a `/'.
	This provides compatibility with other makes, especially when it
	comes to these the GNU makefiles with .PHONY at the top ...
	Previously only dot targets with a built-in special semantics
	were treated this way.

o	PMake: Strip initial ./ path components for purposes of target
	identification.

o	PMake: Let empty command disable transformation rule application
	to target (like in standard make and gnumake).

o	PMake: Don't automatically consider an archive file out-of-data
	just because if has no table of contents.

o	PMake: Accept options, variable assignments and targets on command
	line in any order.

A. Stolcke, 11/3/92
