Configuration Files 237 I use Solaris 2.x. Turns out the version of RCS we use around here is kinda old and doesn’t run under Solaris. It won’t run under the Binary Compatibility package, either instead, it quietly dumps core in some random directory. But the latest version of RCS does work in Solaris, so I got the latest sources and built them and got back to work. I then discovered that our Emacs RCS package doesn’t work with the latest version of RCS. Why? One of the changes to RCS is an appar- ently gratuitous and incompatible change to the format of the output from rlog. Thank you. So I hack the elisp code and get back to work. I then discovered that our shell scripts are losing because of this same change. While I’m at it I fix a couple of other problems with them, things like using “echo | -c” instead of “echo -n …” under Solaris. One of the great things about Suns (now that they no longer boot fast) is that they are so compatible. With other Suns. Sometimes. Hack, hack, hack, and back to work. All seemed OK for a short time, until somebody using the older RCS tried to check out a file I had checked in. It turns out that one of the changes to RCS was a shift from local time to GMT. The older ver- sion of RCS looked at the time stamp and figured that the file didn’t even exist yet, so it wouldn’t let the other person access the file. At this point the only thing to do is to upgrade all copies of RCS to the latest, so that we are all dealing in GMT. Compile, test, edit, compile, install, back to work. I then discover that there are multiple copies of the Emacs RCS code floating around here, and of course I had only fixed one of them. Why? Because there are multiple copies of Emacs. Why? I don't ask why, I just go ahead and fix things and try to get back to work. We also have some HP machines here, so they needed to have the lat- est version of RCS, too. Compile, test, edit, compile, install, back to work. Almost. Building RCS is a magical experience. There’s this big, slow, ugly script that is used to create an architecture-specific header file. It tests all sorts of interesting things about the system and tries to do the right thing on most every machine. And it appears to work. But that's only “appears.” The HP machines don't really sup- port mmap. It’s there, but it doesn’t work, and they tell you to not use it. But the RCS configuration script doesn’t read the documentation, it just looks to see if it's there, and it is, so RCS ends up using it.
238 System Administration When somebody running on an HP tries to check out a file, it crashes the machine. Panic, halt, flaming death, reboot. Of course, that’s only on the HP machine where the RCS configuration was run. If you do a check out from the newer HP machine everything works just fine. So we look at the results of the configuration script, see that it’s using mmap, hit ourselves in the head, edit the configuration script to not even think about using mmap, and try again. Did I mention that the configuration script takes maybe 15 minutes to run? And that it is rerun every time you change anything, including the Makefile? And that you have to change the Makefile to build a version of RCS that you can test? And that I have real work to do? Compile, test, edit, compile, install, back to work. A couple of days later there is another flurry of RCS problems. Remember those shell scripts that try to make RCS more usable? It turns out there are multiple copies of them, too, and of course I only fixed one copy. Hack, hack, and back to work. Finally, one person can’t use the scripts at all. Things work for other people, but not him. Why? It turns out that unlike the rest of us, he is attempting to use Sun’s cmdtool. cmdtool has a wonderful-wonder- ful-oh-so-compatible feature: it doesn’t set $LOGNAME. In fact it seems to go out of its way to unset it. And, of course, the scripts use $LOGNAME. Not $USER (which doesn’t work on the HPs) not “who am i | awk '{print $1}' | sed ‘s/*\\!//”’ or some such hideous command. So the scripts get hacked again to use the elegant syntax “${LOGNAME:-$USER},” and I get back to work. It’s been 24 hours since I heard an RCS bug report. I have my fingers crossed. Maintaining Mail Services Sendmail, the most popular Unix mailer, is exceedingly complex. It doesn’t need to be this way, of course (see the mailer chapter). Not only does the complexity of sendmail ensure employment for sysadmins, it ensures employment for trainers of sysadmins and keeps your sysadmin away from the job. Just look at Figure 3, which is a real advertisement from the net. Such courses would be less necessary if there was only one Unix (the course covers four different Unix flavors), or if Unix were properly docu-
Previous Page Next Page