bd7f6192a0
a versatile emergency tool: o sed(1) as a multi-purpose text filter -- can do grep's job and much more. o head(1), tail(1), and tee(1) as idiomatic text filters. o mt(1) to control tape drives (PR misc/98383). o chown(8) aka chgrp(8) to complement the ch* subset. o pkill(1) aka pgrep(1) to control running processes easily and thus to be able to recover from a serious problem or a fatal typo in an otherwise live system w/o a reboot. (It also deserves adding to rescue(8) for its having triggered a latent bug in crunchgen(1), but we had better add a regression test for that. :-) The resulting change in rescue(8) size has the following order of magnitude on i386: 3787656 - 3727872 = 59784, i.e. just a tad. Discussed on: -hackers (I seem to have wearied all opponents :-) PR: misc/98383 |
||
---|---|---|
.. | ||
librescue | ||
rescue | ||
Makefile | ||
README |
The /rescue build system here has three goals: 1) Produce a reliable standalone set of /rescue tools. The contents of /rescue are all statically linked and do not depend on anything in /bin or /sbin. In particular, they'll continue to function even if you've hosed your dynamic /bin and /sbin. For example, note that /rescue/mount runs /rescue/mount_nfs and not /sbin/mount_nfs. This is more subtle than it looks. As an added bonus, /rescue is fairly small (thanks to crunchgen) and includes a number of tools (such as gzip, bzip2, vi) that are not normally found in /bin and /sbin. 2) Demonstrate robust use of crunchgen. These Makefiles recompile each of the crunchgen components and include support for overriding specific library entries. Such techniques should be useful elsewhere. For example, boot floppies could use this to conditionally compile out features to reduce executable size. 3) Produce a toolkit suitable for small distributions. Install /rescue on a CD or CompactFlash disk, and symlink /bin and /sbin to /rescue to produce a small and fairly complete FreeBSD system. These tools have one big disadvantage: being statically linked, they cannot use some advanced library functions that rely on dynamic linking. In particular, nsswitch, locales, and pam are likely to all rely on dynamic linking in the near future. To compile: # cd /usr/src/rescue # make obj # make # make install Note that rebuilds don't always work correctly; if you run into trouble, try 'make clean' before recompiling. $FreeBSD$