Tools for the Power UNIX Developer

As Chris says at the Pundits Web Site we were talking about putting some of the tools and clues we use everyday up for others to use. We were hoping that this would generate enough consulting business to allow one of us to do it full time.

Real life gets in the way.

But I do have about 125k lines of nifty C code to share with the world. These are the tools and a brief description of the tool.

The package numbers of are out of date, but the purpose is the same.


calls
Programs I use to work on a product coded in C.
calls/bin/calls
Produce a call graph of the relations of each C routine to every other. Release to comp.sources.unix a long time ago. This update includes changes I've gotten from the Net.
calls/bin/cdecl
Help a novice C programmer decode a C declatation. I use this to teach C. It is also useful as an example of lex/yacc customs.
calls/bin/maketd
Do the work to make a makefile see all the transative dependencies. This is also useful to add explicit rules for building cross platfrom stuff.

conserver
Manage many serial line devices (servers) through a nice virtual console service. Really makes life easy for the remote sysadmin, but it makes life better for group work as well.
conserver/etc/autologin
Put a login shell up on a console port (tty01, ttya or the like).
conserver/etc/conserver
Connect to all the serial (or pseudo) devices on a host, network to others.
conserver/etc/console
The client part that connects to the console server through the network to inspect a line.
conserver/lib/conserver.cf
A sample console server configuration.

entomb
Preserve removed files in a "tomb" so Customers can recover them. This package by itself doesn't help much, you must recompile the system programs rm, mv, cp and the like to finish the job. My friend Andy Korty has done work in this see his home page for details.
entomb/Paper
A white paper on a older version of the entombing system.
entomb/bin/rmfile
A program to remove files with funny names.
entomb/bin/unrm
A program to restore deleted files.
entomb/bin/untmp
A program to cleanup /tmp just before a Customer does a logout.
entomb/etc/preend
The system tomb cleaning agent.
entomb/lib/entomb
The setuid part that moves a file to a tomb.
entomb/lib/libtomb
The API to make any old program entomb (like rm, mv, cp, and sh).

gnu
An example of how I make the GNU autoconf stuff work for me.
gnu/bin/gzip
GNU gzip slaved to the msrc system.
gnu/bin/rdist
Rdist 6.1.3 slaved to the msrc system.
gnu/bin/screen
GNU Screen slaved to msrc, by this point you should know how to do any.

install
A much better product installer suite.

These tools were the subject of a Lisa paper by Kevin Smallwood. They help you keep a backup path when you make changes to a host. It also allows normal people to maintain some products in a "User supported" area of you hosts (via installus).

If you like this one the new "modec" package will be good for you as well.

install/bin/install.d
A clone of BSD's install program, but keeps old versions in OLD/ in case things go badly. Doesn't do all the things the FreeBSD one does because they added the -f flags stuff and didn't give me an API to call to do it.
install/etc/installus
Let Joe User install "user supported" software.
install/etc/instck
Check for files that are installed badly, or have the wrong modes.
install/etc/purge
Clean out OLD directories, like preend cleans out tombs.
install/lib/install.cf
An example install configuration file.

labwatch
A package to monitor many hosts in a network efficent way. I've used it to collect CPU load information, monitor hosts that might float away (in a public lab), and monitor system uptime.
labwatch/bin/labstat
The user agent to poll for status.
labwatch/etc/labc
A control agent to tune the monitor parameters.
labwatch/etc/labd
The host monitor (like SNMP but more UNIX aware).
labwatch/etc/labwatch
The console monitor, what Operations watches.
labwatch/lib/labwatch
A sample configuration.

mkcmd
The program that writes all my user interface code for me.

This is the key to all my stuff. It contains a library of small components that I reuse over and over to write all this stuff.

mkcmd/bin/explode
Extract bits of code from the reuse library.
mkcmd/bin/mkcmd
Integrate user interface and reused code.
mkcmd/lib/explode
A reuse library for all this code.
mkcmd/lib/mkcmd
A user interface reuse library.

msrc0
The code to boot-strap the msrc package, needs mkcmd too.

msrc
The system I use to write all this and keep the release/version/revision work straight. I have a model for software construction that I use to build all this and these tools make that work (for me). It might even work for you.
msrc/Admin/bin
Some shell script prototypes to make this more automated.
msrc/Admin/docs
msrc/Admin/papers
Incomplete documents on how/why. Some are quite old.
msrc/Admin/master
The "master source" level, where I keep single products.
msrc/Admin/meta
The "meta source" level, where I keep packages of related products.
msrc/Admin/platform
The product on a platform level I use as an example of the old way.
msrc/local
Local tools that automate parts of the msrc system.
msrc/local/bin/rcsvg
An add-on to RCS to make getting a subtree with a common symbolic name a snap.
msrc/local/etc/distrib
An add-on to rdist (6.1.3) to help maintian a list of hosts and which products run there.
msrc/local/etc/distrib/Scripts
Prototype work for later.
msrc/local/lib/distrib
Sample configuration for msrc.

ptyd
A daemon used a Purdue's Computing Center from 1989 to 1995 to allocate pseudo tty (pty/tty) pairs, establish ownership, and provide utmp/wtmp entries.

This used to be #ifdef'd in xterm (might still be). The daemon (ptyd) lives on a UNIX domain socket and issues pty/tty pairs to authenticated users.

The library (libpty) has some clever API code in it to make talking to ptyd very easy.

ptyd/etc/ptyd
The system agent that allocated and cleanup pty resources. Genrerally started as system boot. With the ksb version of inetd it can be started from inetd as well.
ptyd/etc/libptyd
The API to call the pseudo tty daemon. Provides an "openpty" and "forkpty" which do what you'd think.
ptyd/bin/script
A more than slightly hacked version of BSD4.3 script. This should be upgraded to a more modern script code base. This version has utmp support and uses ptyd.

qsys
A simple UNIX job scheduler. With modern CPU speeds it is silly, but it has some cool ideas in it. "It has a pleasing (non-root) design in any case." -- ksb
qsys/bin/qadd
Add a job to a job queue.
qsys/bin/qrm
Remove a job from a queue.
qsys/bin/qstat
A user agent to scan the queue.
qsys/etc/qend
Stop the job system.
qsys/etc/qinit
Build a new job queue.
qsys/etc/qkill
Kill a running job from the queue.
qsys/etc/qlock
Lock a queue, after all the current jobs are done it will fall idle.
qsys/etc/qmgr
Run jobs from a queue.
qsys/etc/qstart
Start the job queues on this host.
qsys/lib/qcommon
Common code from all the qsys parts.

rm
Layer on top of entomb to get entombing to the masses. We don't use this package anymore (mostly) because the rm/mv/cp that comes with FreeBSD we can just rebuild (see entomb/INSTALL for details).
rm/bin/cp
An older BSD cp, right out of Net2 I think.
rm/bin/mv
An older BSD mv, right out of Net2 I think.
rm/bin/rm
An older BSD cp, right out of Net2 I think.

shells
Some shells you can put Customers in or build special logins for to make your life better.
shells/etc/msh
The "message shell", tells a Customer a text message a logs them out.
shells/etc/remote
Allows a host to proxy logins for "guests". Lets walk-ins to a lab use a hard wired terminal to gateway to another host without a shell on the local server. Even does XDM, and tn3270.
shells/etc/tpsh
Strange best to allow operators to load software upgrades.

turnin
The old Purdue Electronic Submission system. I've updated it to avoid some of (not all, of course) the pit falls that it suffered from. I don't think one can break root with it, but I run it setuid to the instructor, not root, so I don't mind.
turnin/bin/project
Allow instructors to turn on/off submissions and grade assignments.
turnin/bin/turnin
Allow students to submit work for grading.
turnin/lib/turnin.cf
Sample configuration.

xapply
Tools for better pipe fitting. These are way powerful.
xapply/bin/xapply
Replacement for xargs(1) and apply(1). A very powerful filter. Will keep N jobs running in parallel, will read the list of items from the command line, or from stdin, or will match lines in multiple files to control jobs. This is some of my best work.
xapply/bin/Tee
A version of tee(1) that popens as well. You can push a large file though more than one process in parallel. Great for moden computers with multiple CPUs.
xapply/bin/curly
Do or undo the csh(1) style curly brace expansion a{1,2,3}.c -> a1.c a2.3 a3.c and the inverse. (Posted to comp.sources.misc.)
xapply/bin/flock
Get a BSD stype file lock and execute a process. (Posted to comp.sources.unix.)

modec
sbp, vinst, modecanon
Tools that are add-ons to install and the like.
modec/etc/modec
The "mode canon" program uses install/etc/instck to fix all the modes on your system with a small number of key strokes. It has not ever been released because I've trashed systems with it, so I know you will.
modec/etc/sbp
This builds a cold backup of (some of) your disks on a host. It is intended to suplement backups by making an "alternate boot disk" available when the system boot disk is sick. It works great, and I use it before I run modecanon...
modec/bin/vinst
A "quick wrapper" around install's install (or installus) to let the owner of a file use an editor on the file, but still make a -1 backout copy in OLD. Believe it or not I quite often wrap it in a shell script.

remote customer login services - 2.2
rcls, rcds, rcls-lib, rcds-lib, rc.d/rcls
A RPC based login and data service for CGI support. This package is not an mature as others. It needs the Berkeley DB (3.1+) from SleepyCat.com to function at all.
rcls/libexec/rcls
The login service for a login CGI. With a single RPC you get everything you need to know to login a web Customer. This is meant to be called from the wise package's stater.
rcls/libexec/rcds
The data services for CGIs is like a very modular database. It can gateway to any database but the Berk DB is builtin.
rcls/lib/rcls
Models for Customer classes.
rcls/lib/rcds Models the classes of data service.
rcls/rc.d/rcls
The system startup for the login and data services.
rcls/libexec/hashd
Generate a "unique uid" for 2^60th logins.

wise Not available yet
stater, rico, wise_auth, wise_apply, rc.d/wise
This package completes the login and data services layer on a stater. It is not released yet.

protect Not available yet
cgi-bin/protect, public-bin/protect, protect-bin/protect, login, logout, counter
This package is an example implementation of wise aware CGIs. Not released yet.

unity Not available yet
unity/cgi-bin/unity
A CGI that makes maky web servers look like a single host to the Net.
unity/libexec/tftpd
A much better tftp server.
unity/libexec/unityd
Part of unity's off-load protocol.
unity/bin/tftp
A better client program to chat with tftp servers and clients.

$Id: What.html,v 1.2 1997/12/05 14:55:30 ksb Exp $
For up to the minute release packages see the index.