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.