\input mccinfo

@setfilename interim
@settitle MCC Interim Linux
@setchapternewpage odd
@set version 1.0+
@set date April 1994
@defindex fi
@paragraphindent 0

@ifinfo
This file documents the MCC Interim version of the Linux
operating system.

Copyright @copyright{} 1994 University of Manchester

Permission is granted to use any parts of this file
for non-profit purposes, provided credit is given to the
University of Manchester, whose support has made this
project possible.
@end ifinfo

@titlepage
@title MCC Interim Linux
@iftex
@vskip 45pt
@end iftex
@subtitle The MCC Distribution of the Linux Operating System
@iftex
@vskip 30pt
@end iftex
@subtitle Version @value{version}
@iftex
@vskip 30pt
@end iftex
@subtitle @value{date}
@author {}

@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1994 University of Manchester

Published by Manchester Computing Centre, University of Manchester.

Permission is granted to use any parts of this document
for non-profit purposes, provided credit is given to the
University of Manchester, whose support has made this
project possible.
@end titlepage

@ifinfo
@node Top, Introduction
@top MCC Interim Linux

This document describes the MCC Interim version of Linux.
It applies to version @value{version}, which is the most
recently released version.

@menu
Chapters:

* Introduction::    What is MCC Interim Linux?
* Getting::         Getting a copy of MCC Interim Linux.
* Preparing::       What to do before you install Linux.
* Installing::      Installing or updating MCC Interim Linux.
* Adapting::        Tailoring MCC Interim Linux to suit your taste.
* Using::           Features of Linux that you should know.
* Documentation::   Available Documentation for Linux.
* Acknowledgments:: Where the programs come from.

Indices:

* File Index::
* Program Index::
* Concept Index::
@end menu
@end ifinfo

@node Introduction, Getting, Top, Top
@chapter Introduction

The MCC Interim versions of Linux are designed to allow
people who are not Unix experts to install a version
of the Linux operating system on a PC.
The installed system should be self-contained, but easy to extend.

@menu
Sections:

* Linux::      What is Linux?
* MCC::        What are the MCC Interim versions of Linux?
* Copyright::  Copyright and conditions of distribution
* Bugs::       Bugs and warnings
@end menu

@node Linux, MCC, , Introduction
@section What is Linux?

Linux is an operating system written by the Finnish programmer
Linus B Torvalds.
@cindex Linux
@cindex Unix
@cindex hardware
@pindex vmlinuz
It looks like the Unix operating
system, and the source of the entire system is available.
Binaries and source
can be distributed freely under the terms of the GNU Public License.
@xref{Copyright, , Copyright and conditions of distribution}.
Programs from the various System V and BSD versions
of Unix should compile and run under Linux with few changes.
Linux aims to conform as closely as it can to the various
@sc{posix}, @sc{iso}, and @sc{ansi} standards.

Linux runs only on machines which have processors compatible with the
Intel 386 or 486.  If you intend to run Linux,
your computer must have appropriate hardware and sufficient
resources:

@itemize @minus
@item You must have at least 2 Mb of memory to run Linux.
@cindex memory
For good performance, you need at least 4 Mb of memory, and
the X window system performs slowly without at least 8 Mb.

@item Linux requires an @sc{isa} or @sc{eisa} bus.
It runs on systems with a local bus architecture, such as @sc{vesa}.
At present it does not support the @sc{mca} bus architecture;
@cindex MCA bus architecture
@cindex PS/2 is unsupported
this means that is does not run on PS/2 machines.

@item Linux supports @sc{at} standard (16-bit) hard disk controllers,
including @sc{ide}, @sc{esdi}, @sc{mfm}, and @sc{rll} controllers.
@cindex disks
@cindex SCSI controller
It supports generic @sc{xt} controllers (8 bit hard disk controllers
with @sc{mfm} or @sc{rll}).
It also supports many @sc{scsi} controllers and @sc{cd rom}s,
including Adaptec 1542 (but not 1522),
Adaptec 1740 in extended mode (not in 1542 compatible mode), Seagate
ST-01 and ST-02, NCR-5380, PAS-16, Trantor T128, T128F, and T228,
Future Domain 1680, TMC-850, any board based on the TMC-950 chip,
TMC-1660 and 1680, Ultrastor 14F, 24F, and 34F, and WD7000.
Clones of these @sc{scsi} controller cards should also work with Linux.

@item You will need disk
space for swapping (or paging) and for file systems.  A small
installation can share a 40 Mb disk with DOS, but a full installation
including the X window system may require 60 Mb or more.
@xref{Preparing, , Preparing to Install Linux}.

@item Linux supports several Ethernet cards.  The `official' kernel
currently contains code for NE1000, NE2000, NE2100, SMC Ultra, 3c501,
3c503, 3c509, 3c579, HP PCLAN, AT1500, AT1700, DEPCA, D-Link DE600,
AT-LAN-TEC/RealTek, and Western Digital 8003 and 8013 cards.
@cindex Ethernet cards
Patches for other cards are available, and will eventually be
included in the `official' kernel.  The most common cards in Manchester
are RM Ethernet cards.  Some of these can be modified to work as
NE2000 cards: AT cards with serial numbers above 20000.
We have been unable to get RM Ethernet cards to work reliably with Linux,
and Research Machines have been unwilling to supply information which
could help us to get their cards working, or only if we sign a non-disclosure
agreement.

@item Text mode supports @sc{vga}, @sc{ega}, @sc{cga}, and Hercules cards.
@cindex graphics
Linux supports graphics and X11 with @sc{ega}, normal @sc{vga}, some
@sc{svga} cards (ET3000, ET4000, Paradise, and some Trident chips),
some S3 cards (but not Diamond Stealth), 8514/A, Mach32, Mach8, and
monochrome video boards such as Hercules.
@end itemize

Detailed information about currently supported hardware is published
in the Linux hardware HOWTO.
@xref{HOWTO, ,The Linux HOWTO documents}.

Among the features of Linux are the following:
@cindex features of Linux

@itemize @minus
@item It is a multi-tasking system: several programs can run at the
same time.  You can run several programs simultaneously on several
virtual consoles, in several windows, or by logging in remotely.
@cindex multi-tasking

@item It is a multi-user system: several users can use the same machine
at the same time.

@item Linux runs in 386 protected mode.
@cindex protected mode
Different processes are
isolated from each other, so that one program cannot bring the system down.

@item Executable files are demand-loaded, so that parts of a program
are in memory only when those parts are being executed.
@cindex demand loading

@item Compiled programs are linked with dynamically loaded shared
libraries to reduce disk and memory usage.
@cindex shared libraries
@cindex libraries, shared

@item Executables share memory pages.  Even a data page is shared
until one program writes to it.
@cindex shared memory
@cindex memory, shared
This increases speed and decreases memory use.

@item Programs access virtual memory which is paged to disk.
@cindex virtual memory
@cindex memory, virtual
You may allocate up to 16 swap areas, each up to 16 Mb in size.
This memory forms a pool which all running processes share.

@item Physical memory is organised into a unified memory pool or
@dfn{cache},
which changes in size depending on the system load.

@item The kernel can emulate a maths coprocessor if you have none.
@cindex coprocessor emulation
@cindex maths coprocessor
If you have a coprocessor, you can recompile the kernel without the
emulation code to save memory.

@item The kernel supports multiple virtual consoles, which allow
several independent login sessions on the system console.
@cindex virtual console
@cindex console, virtual

@item The kernel supports several file systems, including its own
extended and extended version 2 file systems, @sc{minix}, @sc{xenix},
and DOS compatible file systems, and a special @dfn{proc} file system
for getting information about running processes.
@cindex xenix file system
@cindex ext file system
@cindex proc file system
@cindex msdos file system
@iftex
@dosubind{cp}{file system}{xenix}@relax
@dosubind{cp}{file system}{ext}@relax
@dosubind{cp}{file system}{proc}@relax
@dosubind{cp}{file system}{msdos}@relax
@end iftex
Linux cannot access DOS 6 compressed partitions.

@item Linux supports TCP/IP networking, including ftp, telnet, @sc{nfs},
and other protocols.
@end itemize

The software which is distributed in the MCC Interim versions of Linux
comes from a variety of sources.  Much of it comes from the GNU project,
some of it is taken from the published BSD sources, and some has been
written specifically for Linux.  The source code for every single
binary and library is available with the MCC distribution.
@xref{FTP, , Getting MCC Interim Linux by anonymous ftp}.
Moreover, the optional @i{patches} package contains all patches applied
to these sources to make the MCC distribution.

@table @strong
@item WARNING:
Linux is an operating system which is very different from DOS.
It requires a certain minimal amount of attention if it is to work well.
In particular, you must @strong{never} simply turn off a machine on
which Linux is running.  For more information about using Linux safely,
see @ref{Caring, , Caring for your Linux system}.
@end table

@node MCC, Copyright, Linux, Introduction
@section What are the MCC Interim versions of Linux?

When Linux version 0.10 first appeared in the autumn of 1991, it was
released by Linus Torvalds as a pair of floppy disks, known as the
@dfn{boot} and @dfn{root} disks.
Linus himself released several utilities
which did not fit on these disks.  Eventually quite a number of
contributions were available.  Software distribution
was rather chaotic, and you needed a lot of effort to
collect a complete base system.

The Manchester Computing Centre (MCC) is a part of the University
of Manchester, supporting computing at the University, at UMIST (the
University of Manchester Institute of Science and Technology),
and at several other British universities.
@cindex MCC

We began to make Linux available by anonymous ftp in November 1991,
and we released the first MCC Interim version of Linux (version 0.12+)
the following February.
@cindex ramdisk as root
This version made use of ramdisk code written by Theodore
Ts'o to mount a virtual root disk at boot time from the kernel floppy.
(This type of distribution was used earlier by Andrew Tannenbaum to
distribute his operating system @sc{minix}.)  With version 0.99p8+, we
abandoned the ramdisk-as-root and adopted a combined bootable root disk.
The first combined root disk was created by H J Lu (who made
essential use of Werner Almesberger's @sc{lilo} software).  Unlike H J's
bootable root disk, the MCC disk did not contain an executable shell.
With release 1.0+, the minimum base system no longer fits comfortably
on a single disk, so we return to having two disk images,
neither of which contains an executable shell; once more you can
install the MCC version from a ramdisk, though this is only one
of the available options.

Very shortly after the first MCC Interim version of Linux appeared,
other people released similar versions: Dave Safford's @sc{tamu} releases
and Martin Junius's @sc{mj} versions were eventually followed by Peter
Macdonald's massive, comprehensive @sc{sls} releases and H J Lu's small
base systems.  More recently the Slackware and Debian versions have
appeared, as well as a number of commercial releases.
What distinguishes the MCC versions from these others?

From its first release, MCC Interim Linux has included basic utilities,
the GNU C compiler, and the sources to the current kernel release.
@cindex contents of MCC distribution
@cindex source files
MCC Interim versions aim to
provide a stable base system, which can be installed in a short time, and
to which other software can be added with relatively little effort.  Every
binary file in an MCC distribution has been compiled
under that version of the kernel, by that version of @code{gcc}, is linked
with that version of the libraries, and has been tested to some extent.
The only binaries which we do not recompile are the C and C++ libraries,
which we take directly from H J Lu's distribution.

We install this version of Linux on small 386-SX machines for
our C and Unix courses, and we need to be able to install it on twelve
machines in about one hour.  We also distribute this version of Linux
to our clients in Manchester.  We make no attempt to include a wide
variety of packages, or large packages such as X386.
For information about installing XFree86 release 2.1, see
@ref{XFree86, , Installing the XFree86 software}.
The @i{emacs} and
@i{info} packages were added to MCC Interim Linux only because we have
been using them for our courses, and because of the value of the information
included in the info files.
@xref{Online, , Documentation available on line}.
@cindex Debian version
People who want a distribution which
contains nearly everything should get the Debian version, which is about
five times the size of MCC, and quite comprehensive.

Our versions are called @dfn{interim} because they are not intended to be
final or official.
@cindex interim
They are small, harmonious, and moderately tested.
They do not conform to everyone's taste --- what release does? --- but
they should provide a stable base to which other software can be added.

The MCC distribution allows you to upgrade an existing
system, as well as to install a complete new system.
@cindex upgrading an existing system
The main limitation is that partitions must contain @i{minix} or @i{ext2}
file systems: @i{ext} and @i{xiafs} file systems are not supported in the
installation, though they can be mounted from the installed system
after you recompile the kernel.
As of release 1.0+, @i{minix} file systems must support 30-character
filenames, or the MCC distribution will fail to install properly.
Upgrading an old system looks just like installing a new system,
except that you don't need to run @samp{mkswap} and @samp{mkfs}
before installing.  Instead you should run @samp{fsck}, which you
can do from the boot disk.  Old binaries are deleted, except for
some old libraries, which may be required by programs which you
have acquired from somewhere else.

Text files, especially the configuration files in @code{/etc}, are more
of a problem.
@fiindex @code{backupdirs}
We don't want to throw away the old files, which you may have spent
some considerable time polishing, but we must install new configuration
files, or else the system may not boot properly, or may work badly if
it boots at all.  For this reason, the installation creates a special
directory named @code{/backupdirs}.  In this directory it creates
subdirectories such as @code{etc}, @code{home/root}, and
@code{home/user}.  Any old configuration files which might be overwritten
during the upgrade are moved to these directories before the new files
are installed.  After installation, you may cautiously compare the
new files with the old ones, and incorporate your personal preferences
into the new files.

You must be particularly careful with files such as @code{/etc/inittab}
or @code{/etc/rc}, since mistakes in these may prevent the system from
booting, or cause serious problems while the system is running.
@fiindex @code{etc/inittab}
@fiindex @code{inittab}
@fiindex @code{etc/rc}
@fiindex @code{rc}
It is a good idea to read the man pages for @samp{init} and @samp{inittab}
before making any changes to these files.  A number of other @code{rc}
files are created in @code{/etc} during the installation; these are
described to some extent in @code{/etc/inittab}.
@xref{Adapting, , Tailoring MCC Interim Linux to Your Taste}.

@node Copyright, Bugs, MCC, Introduction
@section Copyright and conditions of distribution

Software today comes under a wide variety of copyright restrictions,
and it is important to know what conditions apply to the software
you use.
@cindex Copyright
The software in MCC Interim versions of
Linux, and other software which can be added to it, is copyrighted in
a variety of ways.  In general, all of it is available to be used by
anyone, and the source to all of it is available as well.  If you intend
to use Linux or any of its parts for commercial purposes, you should get
the source files and read the copyrights contained in them.  (A list of
the sources can be found in @ref{Acknowledgments}.)  Most Linux
software falls under one of the following categories:

@table @r
@item GNU @i{copyleft}
@cindex GNU copyleft
The GNU General Public License applies to the Linux kernel, to the GNU
C and C++ compilers, to all utilities distributed by the Free Software
Foundation, and to many contributed utilities.  This copyright, also
known as a @i{copyleft}, is designed to ensure that the source to software
is available, and that you can give away or sell copies of the source
and of compiled binaries.  There is no warranty, but you are obliged to
notify anyone of any changes which you have made to the original.  You
are obliged to publish on each copy an appropriate copyright notice and
a disclaimer of warranty.  Works derived from copylefted works must be
released under the same terms.  The terms are specified in the GNU General
Public License, which is installed as @code{/usr/lib/COPYING}.

@item GNU library license
@cindex GNU library license
The GNU library license applies to the GNU C++ library and to all works
that must be linked with this library.  This allows commercial binaries
to be supplied in an unlinked form, so that purchasers can link the
binaries with other versions of the library.

@item BSD copyright
@cindex BSD copyright
The BSD copyright applies to all source from the University of California
at Berkeley.  Source may be reused freely, but it should contain a notice
to the effect that all or part of the software was developed by the
University of California at Berkeley.  Moreover, the name of the
University may not be used to endorse or promote such products.

@item MIT copyright
@cindex MIT copyright
@cindex MIT X Consortium
The X Window System, version 11, is copyrighted by the Massachusetts
Institute of Technology, and `X Window System' is a trademark owned
by MIT.  Most of the source for this software was developed by the
MIT X Consortium, and is covered by the MIT copyright.  This is
similar to the BSD copyright in permitting free commercial use of
MIT code, subject to the inclusion of similar notices giving
credit for any MIT code used in the final product.

@item Public domain software
@cindex public domain software
Some programs in this distribution are in the public domain.  They
have no copyright attached and can be used in any way without any
obligation or restriction.
@end table

@node Bugs, , Copyright, Introduction
@section Bugs and warnings

The MCC Interim release of Linux assembles code from many sources.
@cindex bugs
@cindex warnings
@fiindex @code{Bugs+Warnings}
Even after the release and the documentation have been frozen,
the file @code{Bugs+Warnings} is updated.
Please read it carefully.

I have fixed many bugs, but I am certain I have created others.
I would appreciate any bug reports or fixes.
Please send them by E-mail to me at @code{LeBlanc@@mcc.ac.uk}.

@enumerate
@item
This distribution, even when it is used to upgrade an existing system,
@strong{must} be installed from the boot and root disks.
If you try to install MCC packages without using the boot and root
disks, they will probably not work properly.

@item
As of release 1.0+, MCC Interim Linux does not install correctly on
a @i{minix} file system unless it accepts filenames of up to 30 characters
in length.  The @samp{mkfs} command on the root disk does not allow
you to create a @i{minix} file system with the 14-character limit on file
name length.

@item
The Linux @sc{nfs} implementation is limited by the size of the memory
which the kernel can allocate for buffers.
@cindex NFS options
Heavy reading or writing of
files in an @sc{nfs}-mounted file system may cause the kernel to hang
unless you specify the options @samp{rsize=1024,wsize=1024} either on
the @samp{mount} command or in the entry in @code{/etc/fstab}.

@item
Older versions of the SysVinit package allowed root to enter
single user mode without a password, but required the root password
when the system was booted in single user mode.
In attempting to restore this behaviour, I have introduced a new bug.
After you boot the system in single user mode, you can change to another
run level, but if you as root change back to single user mode without
rebooting, you must type in the root password again.

@item
The @samp{more} command does not work properly under X.

@item
The root and boot disks, as well as the installed system,
contain device files for eight partitions on each disk.
If you need more partitions, you must use @samp{MAKEDEV} or
@samp{mknod} to create additional device files in the installed
@code{/dev} directory.

@item
It is not our policy to make extensive modifications to the Linux
kernel.  Bugs in the current kernel may be fixed in later versions
of the kernel.

@item
After the package is released, small bugs are often discovered.
The Bugs+Warnings file may be consulted for further information.
@end enumerate

@node Getting, Preparing, Introduction, Top
@chapter Getting a Copy of MCC Interim Linux

There are two ways at present by which you can get a copy of MCC
Interim versions of Linux: by anonymous ftp, and by visiting MCC.

@menu
* FTP::    Getting MCC Interim Linux by anonymous ftp.
* Shop::   Getting MCC Interim Linux from the MCC shop.
* NFS::    Installing MCC Interim packages using NFS.
@end menu

@node FTP, Shop, , Getting
@section Getting MCC Interim Linux by anonymous ftp

@dfn{Anonymous ftp} is a service which allows people with TCP/IP
software and Ethernet access to retrieve files from other machines,
called servers.
@cindex anonymous ftp
You do not need a user name on the ftp servers.
The required software is installed on most Unix machines.
Several versions of the software are available
for machines running MS-DOS.  A full tutorial in the use of this
software is beyond the scope of this document, but the following
sample session should convey a general idea of how the software
can be used.
A longer introduction to anonymous ftp can be found in @i{Linux
Installation and Getting Started}; for further information, see
@ref{Other, , Other information about Linux}.

@example
$ @emph{ftp ftp.mcc.ac.uk}
Connected to cfs2.mcc.ac.uk.
220 cfs2 FTP server (Version wu-2.1c(8) @i{date}) ready.
Name (myname:my.address): _
@end example

On some machines it is necessary to give the ftp command or its
equivalent without an argument, then to use the @samp{open} command
to connect to the remote site.  On some machines it is necessary to
give an IP address instead of the name of the remote machine; the
IP address for @t{ftp.mcc.ac.uk} is 130.88.203.12.

@example
Name (myname:my.address): @emph{ftp}
331 Guest login ok, send your complete e-mail address as password.
Password (linux:ftp): @emph{Myname@@my.address}
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> _
@end example

The user name @samp{ftp} usually gives access to the anonymous ftp
service.  On some machines it is necessary to give the user name
@samp{anonymous}.  The password is not in fact a password at all,
but your identification.  It is customary --- and more courteous ---
to give your own E-mail address as the password.
Sometimes this allows us to contact people who have inadvertently
copied software which contains dangerous bugs.
Some machines will not let you have access to their anonymous ftp
service unless you give a valid E-mail address as the password.

@example
ftp> @emph{dir}
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 4
drwx--x--x   2 admin    sys          2048 Feb 26 19:34 bin
dr-x--x--x   2 admin    sys          2048 Mar 19 17:57 etc
dr-x--x--x   2 admin    sys          2048 Apr  5 13:50 logs
drwx--x--x   2 admin    sys          2048 Mar 18 15:16 mirror
dr-xr-xr-x   3 admin    sys          2048 Mar  2 11:29 pub
226 Transfer complete.
ftp> _
@end example

The @samp{dir} command gives you a listing of the remote directory.

@example
ftp> @emph{cd pub/linux}
250 CWD command successful.
ftp> @emph{cd mcc-interim}
250 CWD command successful.
ftp> @emph{cd 1.0+}
250 CWD command successful.
ftp> _
@end example

Note that you may move through the directory tree one step at a time,
or many steps at once.

@example
226 Transfer complete.
ftp> @emph{ascii}
200 Type set to A.
ftp> @emph{get README.lilo}
200 PORT command successful.
150 Opening ASCII mode data connection for README.lilo (45088 bytes).
226 Transfer complete.
46057 bytes received in 0.259 secs (1.7e+02 Kbytes/sec)
@end example

The @samp{ascii} command ensures that subsequent transfers are made
in text mode.  This is a good idea unless you are certain that the
remote machine uses the same format and character set for text files
that yours does.  For example, MS-DOS and Unix do not use the same
format for text files.

The @samp{get} command copies a remote file to your machine.
Some ftp programs allow you to change the name of the file when
it is transferred.
Note also that the names of some files are
changed automatically if you transfer them to MS-DOS systems;
for example, @code{README.lilo} becomes @code{README.LIL}.

@example
ftp> @emph{cd images}
250 CWD command successful.
ftp> @emph{binary}
200 Type set to I.
ftp> @emph{mget r*}
mget root.gz? @emph{y}
200 PORT command successful.
150 Opening BINARY mode data connection for root.gz (844253 bytes).
226 Transfer complete.
844253 bytes received in 1.75 secs (4.7e+02 Kbytes/sec)
ftp> @emph{quit}
221 Goodbye.
$ _
@end example

The @samp{binary} command ensures that subsequent transfers are made
in binary mode.  You should use this mode for all MCC packages and
compressed disk images, as well as for all MS-DOS executable files.

The @samp{mget} command gets all files whose name matches the pattern
you give.  @samp{mget *} gets all files in the remote directory.
Some ftp servers, such as the one at @t{ftp.mcc.ac.uk}, allow you to
get a whole directory tree as a single tar file, or as a compressed
or gzipped tar file.  For example, to retrieve the entire MCC
@value{version} distribution (including source files) as a tar file,
change to the directory @code{/pub/linux/mcc-interim}, and give the
command @samp{get 1.0+.tar}.  Note that the resulting tar file is about
70 Mb in size.

The @samp{hash} command prints a @code{#} for every kilobyte transferred.
This may be useful if your connection does not allow fast transfers.

MCC Interim versions of Linux are released on
@t{ftp.mcc.ac.uk [130.88.203.12]} in the directory
@code{/pub/linux/mcc-interim}.
@iftex
@dosubind{cp}{getting MCC Linux}{by anonymous ftp}@relax
@end iftex
In this directory there are subdirectories @code{dos-utils} (which contains
some commands which you may need if you install Linux from DOS),
@code{@value{version}} (which contains the current release), and @code{old}
(which contains one or more older releases).
The current MCC release is also available from @t{sunsite.unc.edu [152.2.22.81]}
in the directory @code{/pub/Linux/distributions/MCC}, from @t{tsx-11.mit.edu
[18.172.1.2]} in the directory @code{/pub/linux/distributions/MCC},
and also from @t{nic.funet.fi
[128.214.6.100]} in @code{/pub/OS/Linux/images/MCC-interim}.
Other sites sometimes maintain mirrors of the current MCC distribution.

The directory @code{@value{version}} contains the current @code{README} files
and the file @code{Bugs+Warnings}, which contain important information.
@fiindex @code{README} files
@fiindex @code{Bugs+Warnings}
(The contents of all of these files have been incorporated into the present
document.)  It also contains the following subdirectories:

@table @code
@item images
@cindex root disk
@cindex boot disk
@cindex base disk
@fiindex @code{cdrmboot.gz}
@fiindex @code{nocdboot.gz}
@fiindex @code{root.gz}
This contains the gzipped images of the two boot disks and the
root or base disk.  The file @code{nocdboot.gz} is the normal boot
disk, while @code{cdrmboot.gz} is a special boot disk, whose kernel
contains drivers for the supported @sc{cd rom} disks, but which may cause
problems if you have other hardware.  @code{root.gz} is the root or
base disk.  The suffix @samp{.gz} indicates that the files have been
gzipped, and must be uncompressed with @samp{gunzip} or with the
command @samp{gzip -d}.
@fiindex @code{nocdboot.cnf}
@fiindex @code{cdrmboot.cnf}
@fiindex @code{config.in}
The files @code{nocdboot.cnf} and @code{cdrmboot.cnf} are copies of
the @code{config.in} files used to compile the kernels on these disks.

@samp{gzip} is the GNU compression utility.  A version of this utility
which runs under MS-DOS can be found in the @code{dos-utils} directory.

@item packages
This contains the packages which are optional, but important,
parts of the MCC Interim distribution.

@item extra_kernels
@cindex kernels, precompiled
@cindex precompiled kernels
This contains additional kernels which may be installed as if they
were packages.  You should not install more than one of these kernels.
They contain no support for @sc{scsi} or @sc{xt} disks, and one of them,
@code{wd.tgz}, contains support only for the Western Digital 80x3
Ethernet cards.
All four MCC kernels contain maths coprocessor emulation code, and support
for @sc{ide} hard disks, parallel printers, selection (cut and paste
between virtual consoles), ELF and COFF binary support, and support for
the @i{minix}, @i{ext2}, @i{msdos}, @sc{nfs}, and @i{proc} file systems.
@fiindex @code{ipide.cnf}
@fiindex @code{wd.cnf}
The files @code{ipide.cnf} and @code{wd.cnf} are copies of the
@code{config.in} files used to compile these kernels.

@table @i
@item cdrmboot
All @sc{cd rom}, all @sc{scsi}, @sc{xd}, all Ethernet cards.
@item nocdboot
No @sc{cd rom}, all @sc{scsi}, @sc{xd}, all Ethernet cards.
@item ipide
No @sc{cd rom}, no @sc{scsi}, no @sc{xd}, all Ethernet cards.
@item wd
No @sc{cd rom}, no @sc{scsi}, no @sc{xd}, WD 80x3 Ethernet cards only.
@end table

@item extra_packages
This contains packages which have a secondary status, mainly because
they are not needed to recompile other packages.

@table @i
@item emacs@r{,}
@itemx elisp
A cut-down
version of the @samp{emacs} editor, which we use in our courses
at the Computer Centre.
@pindex emacs
A more complete version can be obtained by installing the
@i{emacsxtr} package in addition to these two.
Note that the @i{emacsxtr} package is too large to fit on
a floppy disk.
A version of @samp{emacs} which is compiled
with support for X windows is available by anonymous ftp
from the @code{contributions} directory.
@item extrainf
Info files which I did not wish to
include in the main distribution; these describe the GNU assembler
@samp{gas}, @samp{bison}, @samp{flex}, texinfo, @samp{gcc} and
how to port it, @samp{cpp}, some of the odder parts of @samp{emacs},
and other subjects.
@pindex as
@pindex gas
@item extralib
A number of libraries which are of less general interest
than those contained in the @i{gccb} package: @code{bfd}, @code{dbm},
@code{gmon}, @code{iberty}, @code{mcheck}, @code{mmalloc}, @code{opcodes},
and @code{readline}.
@fiindex @code{usr/lib/libbfd.a}
@fiindex @code{usr/lib/libdbm.a}
@fiindex @code{usr/lib/libgmon.a}
@fiindex @code{usr/lib/libiberty.a}
@fiindex @code{usr/lib/libmcheck.a}
@fiindex @code{usr/lib/libmmalloc.a}
@fiindex @code{usr/lib/libopcodes.a}
@fiindex @code{usr/lib/libreadline.a}
@fiindex @code{libbfd.a}
@fiindex @code{libdbm.a}
@fiindex @code{libgmon.a}
@fiindex @code{libiberty.a}
@fiindex @code{libmcheck.a}
@fiindex @code{libmmalloc.a}
@fiindex @code{libopcodes.a}
@fiindex @code{libreadline.a}
@item gprof
The GNU profiler @samp{gprof}, together with its support files.
@pindex gprof
@item kermit
The @samp{kermit} terminal emulator and file transfer utility.
@pindex kermit
@item lp
The Berkeley lineprinter program @samp{lpr}, together with
associated commands and daemons.
@pindex lpr
@item mail
The @samp{elm} mail reader and the @samp{smail} mail delivery
system, together with their support files.
@pindex elm
@pindex smail
@item manpages
Unformatted manual pages.
@cindex manual pages, unformatted
@cindex unformatted manual pages
The formatted pages are all that most people need, and they are
already contained in the other packages.
@item patches
The patches which, when applied to
the corresponding source files, produce the sources compiled in the
current release.
@item timezone
The time zone data files, which are produced from the
@code{utilx15} source file.
@cindex time zone data
@item words
The file @code{/usr/dict/words}.
@fiindex @code{usr/dict/words}
@fiindex @code{words}
@end table

@item source_files
This contains the source files which were used to compile all binaries
in the current distribution.

@item contributions
This contains MCC-style packages and source files for programs
not distributed as part of MCC Interim Linux.  The file
@code{00-contents} describes what is there.  Currently it contains
@sc{nfs} server software, cron, a version of the emacs binary that
supports X windows, the network time software package @code{xntp},
and the typesetting utility @TeX{}.
@end table

After you decide what you need, you may transfer those files in binary
mode to any machine which supports ftp.  The root and boot disks must
be gunzipped and copied to a high density floppy disk, either 3.5 inch
1.44 Mb or 5.25 inch 1.2 Mb, of the sort which can be used to boot
the PC on which you intend to install or upgrade Linux.
@iftex
@dosubind{cp}{preparing a boot floppy}{from Linux}@relax
@end iftex
If you have a
Linux system which you are upgrading, you may put an unformatted floppy
into your 0 drive (which DOS calls @samp{A:}) and give these commands:

@example
fdformat /dev/fd0H1440                 @r{(for 3.5 inch disks)}
fdformat /dev/fd0h1200                 @r{(for 5.25 inch disks)}
gunzip root.gz
dd if=root of=/dev/fd0 bs=18432        @r{(for 3.5 inch disks)}
dd if=root of=/dev/fd0 bs=15360        @r{(for 5.25 inch disks)}
@end example

Then place another unformatted floppy in drive 0 and repeat this process
with @code{nocdboot.gz}.
(We recommend using unformatted floppies, since older floppies often
have bad blocks, which make the critical root and boot floppies
unreliable.)

If you are installing Linux on a machine which already contains a version
of Linux, you may wish to put the MCC packages in a directory in the
existing file system.  MCC Interim versions at present support
only the @i{minix} and @i{ext2} file systems.  The kernel will not
allow you to mount older @i{ext} or @i{xiafs} file systems.
The packages you wish to install should be in a single directory, and
they must have the same file names (in lower case) as they do in the
MCC distribution directory.  You may put all the packages in a DOS
directory on the same machine, or you may copy them to floppies.  The
MCC distribution prefers DOS-format floppies, though @i{minix}
or @i{ext2} floppies will work as well.  DOS format floppies will
hold more, and will not produce spurious error messages during installation.

If you are installing from DOS, you need commands which will gunzip
the disk images and copy then to a disk.
@pindex RAWRITE.EXE
@pindex GZIP.EXE
@pindex GZIPxxx.EXE
@pindex RAWRITE3.COM
@iftex
@dosubind{cp}{preparing a boot floppy}{from DOS}@relax
@end iftex
The commands @samp{GZIP@i{xxx}.EXE},
@samp{RAWRITE.EXE}, and @samp{RAWRITE3.COM} can be found at
@t{ftp.mcc.ac.uk} in the directory @code{/pub/linux/mcc-interim/dos-utils}.
Transfer @samp{GZIP@i{xxx}.EXE} and one of the @samp{RAWRITE} commands in
binary mode.  (The version number @i{xxx} is currently 124.)
The command @samp{GZIP@i{xxx}.EXE} is a self-unpacking archive, which
creates @samp{GZIP.EXE} and a documentation file.  Documentation
for the two @samp{RAWRITE} commands can be found in the @code{dos-utils}
directory with the commands.
Remember to transfer documentation
files in text mode.  After unpacking @samp{GZIP.EXE}, you should
give the following commands:

@example
FORMAT A:
GZIP -D ROOT.GZ
RAWRITE
Enter source file name: ROOT
Enter destination drive: A:
Please insert a formatted diskette into drive A: and press -ENTER- : _
@end example

The program @samp{RAWRITE3} is screen-oriented, and may work rather
faster than the older @samp{RAWRITE} program.

If you are installing Linux on a system which already contains a DOS
partition, you may find it convenient to put MCC packages
in a single directory on that partition.
@cindex floppy disk installation
@iftex
@dosubind{cp}{installing MCC packages}{using floppy disks}@relax
@dosubind{cp}{installing MCC packages}{from a DOS directory}@relax
@end iftex
You can also copy
them to DOS format floppies.  As explained above, the file names must
be the same as in the @code{packages} directory, though under DOS
they will, of course, be in upper case.
If you get all of the packages and extra packages,
they will fit on floppies as follows:

3.5 inch high density floppies:

@table @r
@item disk 1
@i{elisp}
@item disk 2
@i{bison}, @i{gcca}, @i{groff}
@item disk 3
@i{baseman}, @i{flex}, @i{gccb}, @i{words}
@item disk 4
@i{info}, @i{manpages}
@item disk 5
@i{gpp}, @i{mail}, @i{patches}
@item disk 6
@i{extrainf}, @i{gdb}, @i{kermit}
@item disk 7
@i{emacs}, @i{extralib}, @i{gawk}, @i{progman}
@item disk 8
@i{gprof}, @i{linux}, @i{lp}, @i{timezone}
@end table

In this case, disk 1 also has room for the two extra kernel packages.

5.25 inch high density floppies:

@table @r
@item disk 1
@i{info}
@item disk 2
@i{gcca}, @i{mail}
@item disk 3
@i{baseman}, @i{manpages}
@item disk 4
@i{bison}, @i{gawk}, @i{groff}, @i{lp}, @i{timezone}
@item disk 5
@i{gccb}, @i{gdb}
@item disk 6
@i{elisp}, @i{progman}, @i{words}
@item disk 7
@i{extralib}, @i{flex}, @i{gpp}
@item disk 8
@i{extrainf}, @i{gprof}, @i{patches}
@item disk 9
@i{emacs}, @i{kermit}
@item disk 10
@i{linux}
@end table

In this case as well, disk 1 also has room for the two extra kernel packages.

The MCC installation allows you to create your own packages, which you
can install along with ours.
@fiindex @code{install.setup}
@fiindex @code{install.clean}
@fiindex @code{install.info}
@fiindex filename@code{.crc}
They must be gzipped tar files with the extension @samp{.tgz}.
Each package is unzipped and untarred in the root directory, but should
contain only files with relative path names; e.g., not @samp{/usr/bin/cmd}
but @samp{usr/bin/cmd}.
If it contains files @code{install.setup} and @code{install.clean},
these are executed as shell scripts respectively before and after
untarring the archive.
If you wish, you may include a file @code{install.info}, which is
copied to the screen during installation.
@iftex
@dosubind{pg}{@code{brik}}{verifying MCC packages}@relax
@end iftex
The MCC packages all contain a file @i{filename@code{.crc}},
which must have the same basename as the @samp{.tgz} file, and which
has been generated with the command @samp{brik -Gb}.
If such a file exists, the installation uses it to verify the included
checksums after @code{install.clean} is executed.
This @samp{.crc} file is then saved in @code{/tmp}, where you may
delete it, or move it somewhere safe if you wish to keep it.

You may omit any packages you wish.  Obviously, you cannot recompile the
kernel unless you also install @i{gcca} and @i{gccb}.
@i{Bison}, @i{flex}, @i{gdb}, @i{gpp}, and @i{gprof} will not
work properly unless @i{gcca} and @i{gccb} are also installed.

@node Shop, NFS, FTP, Getting
@section Getting MCC Interim Linux from the MCC shop
@cindex MCC shop
@iftex
@dosubind{cp}{getting MCC Linux}{from the MCC shop}@relax
@end iftex

MCC Interim Linux is available from the MCC shop.
You can buy a set of diskettes
containing the boot and root disks, all the packages, and the two
optional kernels with no @sc{scsi} support.
@xref{FTP, , Getting MCC Interim Linux by anonymous ftp}, where these
optional kernels are described.
At present only 3.5 inch diskettes are available on demand, since there has
been little call for the 5.25 inch disks.

You can also obtain a copy of this document.
Because of changes in University funding policy,
there is now a small charge for almost all documents,
including this one.

@node NFS, , Shop, Getting
@section Installing MCC Interim packages using NFS

It is possible to install MCC Interim packages from a directory on a
remote machine, which can be mounted on your Linux system using @sc{nfs}.
@cindex network installation
@iftex
@dosubind{cp}{installing MCC packages}{using NFS}@relax
@end iftex
To do this, you must have a supported Ethernet
card.  You must already have networking software installed and
configured.  In the present release of MCC Interim Linux,
the networking software can be installed and configured from
the boot and root disks.

The mounting of remote file systems varies from one site
to another.  The following commands can be used in Manchester
to make MCC packages available using @sc{nfs} and to install them.
After installing or upgrading from the boot and root disks, as
described in @ref{Installing, , Installing or Updating MCC Interim Linux},
give the following commands:

@example
mkdir /afs /packages
mount -t nfs -o rsize=1024,wsize=1024 zeus.mcc.ac.uk:/afs /afs
cd /packages
ln -s /afs/mcc/ftp/pub/linux/mcc-interim/1.0+/[pe]*/* .
@end example

This places symbolic links to all MCC Interim packages, extra packages,
and extra kernels in the directory @code{/packages}.
Use the command @samp{ls} to list the available packages, and
use the command @samp{rm} to delete the links to any packages you
do not wish to install.

@strong{Note}: Do not install the extra kernel packages @i{ipide}
or @i{wd} if you have @sc{scsi} disks, as these kernels do not
contain support for them.

Give the following command:

@example
@emph{/tmp/bootinstall}

Which drive will you use to install Linux packages:

1  drive A:  5.25 inch HD floppies
2  drive A:  3.5  inch HD floppies
3  drive B:  5.25 inch HD floppies
4  drive B:  3.5  inch HD floppies
5  A directory on an unmounted partition on this machine
6  A directory already mounted at this time
7  No installation at this time

? @emph{6}
Do you wish to have a prompt before each package (Y or N): @emph{n}

If you wish, you may install other parts of MCC Interim Linux
from a directory on another machine, remotely mounted using @sc{nfs},
or from a currently available directory mounted in some other way.
This will only work if you have mounted the remote directory.
If the directory is not accessible now, do you wish to quit? (Y or N): @emph{n}

In what directory are the MCC packages to be found?
@emph{/packages}
@end example

At this point the packages you have selected will be installed.
After you have completed the installation, you may give these commands
to `clean up':

@example
umount /afs
rm -rf /afs /packages
@end example

If MCC Interim packages are available from other sites using @sc{nfs},
you should check with the local administrator to find what commands you
should use to mount the appropriate file system, and to ensure that
you have the appropriate permission to mount it.

@node Preparing, Installing, Getting, Top
@chapter Preparing to Install Linux
@cindex preparing to install Linux

There are several things which you must do before installing
MCC Interim Linux besides getting the appropriate files and making
the boot and root disks.
Your target machine must have free space which
is not included in already allocated partitions.  In some cases this
means that you must back up your hard disk, create a smaller DOS
partition, using the DOS command @samp{FDISK}, and restore your
DOS files to the new DOS partition.

There are procedures which allow you to change the size of a DOS
partition without backing up your files, but
we do not recommend such procedures.  For more information, see
@ref{Dividing, , Dividing up your disk}.

@menu
* Space::     Disk space required for Linux files
* Swap::      Swap space required for Linux
@end menu

@node Space, Swap, , Preparing
@section Disk space required for Linux files

People often ask how much disk space Linux requires.  It is
difficult to give a simple answer to this question, since both
file systems and swap space have different sizes, depending
both on your hardware configuration and on the packages you
select for your system.

You may wish to have a small Linux system with
only a few of the MCC Interim packages.
@ifinfo
@cindex disk space required for Linux files
@end ifinfo
@pindex tune2fs
The following
table gives the approximate size required for each package.  The exact
size depends on the type of file system on which the package is installed;
packages usually take up less space on extended(2) file systems.  Remember
that each file system also uses up a few hundred Kb on each partition,
depending on the type of file system.
Extended(2) file systems also reserve a percentage of each partition
for the superuser; the exact percentage can be selected by an option to
@samp{mkfs} and changed by the command @samp{tune2fs}.
(The MCC distribution does not allow you to change
the 5% default before installation.)  The two @i{base} packages must be
installed from the boot and root floppies before any other packages
are installed.@*

@ifinfo
@sp 1
@end ifinfo
@iftex
@dosubind{cp}{disk space required}{for MCC packages}@relax
@tex
\halign{\hskip1cm \sl{#}\hfil&\quad\hfil\code{#}&\quad#\hfil\cr
\r{Package}&\r{Size in Kb}&Contents\cr
\noalign{\vskip 10pt}
base1&2032&basic binaries and text (on root floppy)\cr
base2&1731&basic binaries and text (on boot floppy)\cr
tcpip&624&commands and daemons for networking (on boot floppy)\cr
baseman&599&man pages for base package\cr
bison&94&the GNU {\tt yacc}-compatible parser generator\cr
elisp&2664&lisp support files for the {\tt emacs} editor\cr
emacs&3039&the {\tt emacs} editor, without lisp files\cr
extrainf&3257&info files for {\tt gas}, {\tt gcc}, odd {\tt emacs} modes\cr
extralib&499&libraries not included in {\tt gccb} package\cr
flex&244&the GNU fast lexical analyser generator\cr
gawk&130&the GNU version of {\tt awk}\cr
gcca&1817&the GNU C compiler, binaries and include files\cr
gccb&2279&the GNU C libraries and code generator\cr
gdb&693&the GNU debugger\cr
gpp&2624&the GNU C{\tt ++} compiler {\tt g++}\cr
gprof&522&the GNU profiler for use with {\tt gcc} and {\tt g++}\cr
groff&2666&the GNU clone of the {\tt nroff}/{\tt troff} text formatter\cr
info&2008&the GNU utility {\tt info}, plus selected info files\cr
kermit&378&the Kermit communications utility\cr
linux&4685&the kernel source for Linux 0.99 patch level 10\cr
lp&112&programs and daemons for local and remote printing\cr
mail&994&programs for sending, receiving, and reading E-mail\cr
manpages&3025&unformatted manual pages\cr
patches&180&the patches used to compile this release\cr
progman&422&manual pages for libraries and kernel\cr
timezone&165&data files and programs concerning time zones\cr
words&402&a list of words for the {\tt look} command\cr
&\hrulefill&\cr
Total&37885&\cr
}
@end tex
@end iftex

Note that this does not include the @i{emacsxtr} package, which requires
another 8827 Kb, bringing the total to 46712 Kb if it is installed.

The amount of disk space you require depends on what software you
intend to install.
@cindex @TeX{}
@cindex X386
@iftex
@dosubind{cp}{disk space required}{for MCC Interim Linux}@relax
@dosubind{cp}{disk space required}{for MCC source files}@relax
@dosubind{cp}{disk space required}{for @TeX{}}@relax
@dosubind{cp}{disk space required}{for X386}@relax
@end iftex
For all MCC packages (not including extras),
you need about 23 Mb, while the extras require another 15 Mb.
For the X window system
(which is not included in the MCC distribution), you need a further
20 Mb.
@xref{XFree86, , Installing the XFree86 software}.
@TeX{} (which is also not included
in the MCC distribution), requires at least 12 Mb more.  The
source files for all MCC packages (which are also not part of
the distribution) require a further 36 Mb.  Additionally,
you must consider the space you need for your work, perhaps an
additional 5 or 10 Mb for small projects,
or 100 Mb or more for large projects.

@ifinfo
@cindex partitions
@end ifinfo
On the other hand, you may plan to have a large system.
@iftex
@dosubind{cp}{partitions}{file system}@relax
@dosubind{cp}{file system}{partitions}@relax
@end iftex
@cindex planning partitions
In that case, you may wish to distribute your
files over several partitions.  Linux allows you to have up to 16
partitions on each @sc{scsi} disk, and up to 64 partitions on each
@sc{ide} disk.
How you divide your disk is up to you, of course, but there are some
points you may wish to consider.

If you intend to upgrade
Linux at some point, it may be convenient to have your personal
files on a separate partition.  In this way, you can make a new file
system for the new distribution, and you will not risk having large,
unnecessary binaries which you no longer need.  I like to have @TeX{}
and X386 on a separate partition, since these are not included in
MCC distributions.  You may like to put the @code{/usr} subtree on
a partition of its own, or @code{/usr/src} or @code{/var}.
The directories @code{/home}
and @code{/tmp} might also have partitions of their own, so that a
user (including you) cannot accidentally fill up the system disk.

Excluding @code{/usr} and @code{/var}, the MCC distribution takes
less than 2 Mb of disk space on the root partition, though you may
wish to leave more for files in @code{/tmp}.  If you have @code{/var}
as a separate partition, you should probably give it at least 5 Mb,
depending on how big your logfiles and print queues will be.
Of course, if you install news reading software, the @code{/var}
partition may need to be much bigger.  The @code{/usr/lib} tree
requires nearly 18 Mb, and @code{/usr/src} at least 5 Mb or more.
The remainder of the @code{/usr} tree takes up about 20 Mb.
@xref{Dividing, , Dividing up your disk}.

@node Swap, , Space, Preparing
@section Swap space required for Linux
@ifinfo
@cindex swap space required for Linux
@end ifinfo
@iftex
@dosubind{cp}{disk space required}{for swapping}@relax
@end iftex
@cindex paging
@cindex swap space

The amount of swap space you require depends on how much memory
you have, and on what you intend to do on your system.  What we
call @dfn{swapping} in the Linux world is sometimes called
@dfn{paging} on other operating systems.  If you use the GNU
C compiler, you may need 6 Mb of memory to compile one file.
If you have only 4 Mb of physical memory, you will also need at
least 2 Mb of swap space for that compilation. When GCC compiles
and optimises a very large function, it may need much more
memory than this.

If you are using X windows, you may need at least 8 Mb of memory
in addition to your other requirements.  If you have several users
(or if you are running large jobs in several windows or on several
consoles), you must add up all their requirements for swap space.

On the other hand, most people are the sole users of their machines,
and many of them do only one or two things at once.  In such cases,
you might plan on having a total of 8 to 12 Mb if you are not using
X windows, or 16 to 20 Mb if you are using X windows and compiling big
packages at the same time.  Some applications running under X windows
may require even more swap space.

Linux can use two kinds of swap areas: @i{swap partitions} and @i{swap
files}.
@cindex swap partitions
@cindex swap files
@cindex planning partitions
@ifinfo
@cindex partitions
@end ifinfo
@iftex
@dosubind{cp}{partitions}{swap}@relax
@end iftex
Swap partitions can be used only for swapping.  Swap files have the
advantage of being easier to create and destroy, but they are less
efficient than swap partitions.  No swap partition or swap file can
contain more than 16384 Kb of usable swap space, so if you need more
than this, you must use several partitions or files.

MCC Interim Linux can create and activate swap partitions during
installation, and normally expects you to have a single swap partition,
which it inserts into @code{/etc/fstab}, so that it is activated
automatically whenever you boot the installed system.
@fiindex @code{fstab}
@fiindex @code{etc/fstab}
If you wish
to have more than one swap partition, or a swap file in addition to
or instead of a swap partition, you must create them yourself after
installation and put the entries manually into @code{/etc/fstab}.
@pindex mkswap
The online manual page for @samp{mkswap} contains instructions for
making new swap partitions and swap files.

@node Installing, Adapting, Preparing, Top
@chapter Installing or Updating MCC Interim Linux

This chapter assumes that you have already obtained all the necessary
files and packages, and prepared or obtained suitable MCC boot and
root disks.
@xref{FTP, , Getting MCC Interim Linux by anonymous ftp}, where the
preparation of boot and root disks is described.

@menu
* Overview::              Overview of an MCC installation or upgrade.
* MCC boot::              Booting from the MCC boot disk.
* Running fdisk::         Editing the partition tables.
* Setting up::            Preparing swap and file system partitions.
* Basic installation::    Installing basic files from the MCC disks.
* Installing packages::   Installing the MCC Interim packages.
* Boot floppy::           Creating a boot floppy.
@end menu

@node Overview, MCC boot, , Installing
@section Overview of an MCC installation or upgrade

In this section I summarise what you should do to install or upgrade Linux
using the MCC Interim distribution.  Exceptions, qualifications, and
alternatives are omitted to keep the picture as simple as possible.

@itemize @minus
@item Read this document carefully, so that you know what the process
of installing Linux involves.  Think about how you will partition your
hard disk.  @xref{Preparing, , Preparing to Install Linux}.

@item Back up your hard disk.

@item Get the boot and root images, packages, and DOS programs by using
anonymous ftp in binary mode.
@xref{FTP, , Getting MCC Interim Linux by anonymous ftp}.

@item Format some high density floppies, and copy the packages you
select to them, leaving two floppies for the boot and root images.
Have a spare formatted floppy which you will use to test your
LILO installation before overwriting your master boot record.

@item Unpack @samp{GZIPxxx.EXE}.

@item Use the new @samp{GZIP.EXE} to unpack the boot and root images.

@item Use @samp{RAWRITE} to copy the boot and root images to high density
floppies.
@xref{FTP, , Getting MCC Interim Linux by anonymous ftp}.

@item Boot from the MCC boot disk.  Give the @samp{ro} command at the
LILO prompt to boot in read-only mode.
At the prompt, place the MCC root disk in the drive and press
@t{<RETURN>}.
@xref{MCC boot, , Booting from the MCC boot disk}.

@item Use @samp{fdisk} to edit your partition table.
@xref{Fdisk, , @samp{fdisk}: the Linux partition table editor}.

@item Use @samp{mkswap} to set up a swap partition.
@xref{Initialising, , Initialising a swap partition}.

@item Use @samp{mkfs} to create file system partitions.
@xref{Creating, , Creating a file system}.

@item Install the @i{base1} package from the MCC boot disk.
@xref{Read-only, , Installing base packages using the @samp{ro} option}.

@item After installing @i{base1}, reboot by answering @samp{y}.
Write down the instruction @samp{ro root=xxx} which is printed at
this point, then press @t{<RETURN>}.

@item Reboot from the MCC boot disk, answering the LILO prompt with
the command @samp{ro root=xxx}, according to the instructions you
noted during the previous step.
Leave the boot disk in the drive while the @i{base2} package is installed.

@item Change your default keyboard map from uk.map to your national
keyboard when you are asked to do so, unless you have a UK keyboard.

@item Install and configure networking software when you are asked to
do so.

@item Remove the boot disk from the floppy drive, and use @sc{lilo} to install
boot code on a floppy by answering the questions which appear at this time.

@item Install the packages you select from floppy disks.
@xref{Installing packages, , Installing the MCC Interim packages}.

@item Reboot from your new boot floppy.

@item Log in as root, and use the @samp{lilo} command to install
boot code on your hard disk.
@end itemize

The following sections explain this process in greater detail and
consider some of the alternatives you may wish to choose.

@node MCC boot, Running fdisk, Overview, Installing
@section Booting from the MCC boot disk

Put the MCC boot disk in the 0 drive
(the A: drive for DOS) of the machine on which you want to install Linux.
@ifinfo
@cindex booting
@end ifinfo
@iftex
@dosubind{cp}{booting}{from MCC boot disk}@relax
@end iftex
Then reboot by pressing the @samp{RESET} button, or @samp{CTRL-ALT-DEL}.
After the system boots, you should see something like this:@*

@cindex hex code for root
@iftex
@dosubind{cp}{partitions}{hex code at boot}@relax
@end iftex
@cartouche
@example
 LILO
 Press <RETURN> to load the floppy into ram as '/'.  This is the
    first step in doing a normal installation or upgrade.
 Type 'ro <RETURN>' to boot with the floppy as root.  This is the
    first step in installing or upgrading a machine with < 4mb of memory.
 Type 'ro root=xxx <RETURN>' to mount a hard disk partition as '/'.
    The value 'xxx' is printed for you during the installation or upgrade.
    This is the second boot on machines with < 4mb of memory, and on other
    machines unless you install LILO on your hard disk.

    Typical values for root:   /dev/hda1: 301     /dev/hda2: 302
                               /dev/hdb1: 341     /dev/hdb3: 343
                               /dev/sda1: 801     /dev/sdb4: 814

 boot: _
@end example
@end cartouche

To install or update MCC Interim Linux, you will need to boot
from this floppy at least once, and possibly twice or three times:

@enumerate
@item You may need to run @samp{fdisk} to edit the partition tables.
After doing this, if @samp{fdisk} reports that the kernel has not re-read
the partition table successfully, you should reboot.
@item You need to set up and mount the hard disk partitions and install
basic files from the boot and root disks.  If you do not use the @samp{ramdisk}
option, you will need to reboot after installing packages from
the root disk.
@item If you use the @samp{ramdisk} option, you must reboot before writing
a boot floppy or before installing the MCC packages from floppies in
drive 0.
@end enumerate

One important decision that you must make is this: will you use the
@samp{ro} option at your first boot, or will you use @samp{ramdisk}?
The @samp{ramdisk} option has some advantages and some disadvantages:

@itemize @minus
@item The ramdisk takes up 1.2 Mb of memory.  This is impossible on
machines with less than 4 Mb of memory, and it slows down the
installation noticeably even on machines with as much as 8 Mb of memory.

@item The @samp{ramdisk} option may save you some fiddling, particulary
if you are willing to use @sc{lilo} to install the boot code directly onto
your hard disk.

@item The @samp{ramdisk} option does not allow you to create a test
boot floppy without an additional reboot.

@item The @samp{ramdisk} option does not allow you to install MCC
packages from drive 0 until after you reboot without a ramdisk.
@end itemize

Considering these reasons, I prefer to think of the simpler @samp{ro}
option as the `normal' way of installing MCC Interim Linux, and
of the @samp{ramdisk} option as the exception.  The following
discussion therefore treats the @samp{ramdisk} procedure only as
an alternative.

To boot from the boot disk without using a ramdisk, simply type @samp{ro}
and press @t{<RETURN>} after the above boot message appears.
Wait until you receive this prompt:

@example
VFS: Insert root floppy and press ENTER
@end example

Then remove the boot floppy, put the root floppy in its place, and
press @t{<RETURN>}.  You should shortly see the message @samp{Loading
/etc/kbmap}, which is described below.

If you wish to use a ramdisk, boot from the boot disk and press @t{<RETURN>}
after the LILO boot message.  Eventually you will see these messages:

@example
RAMDISK: Loading 1200 blocks into RAM disk.............................

Now remove the boot disk from the floppy drive, place the
root disk in the drive, and press <RETURN>.
@end example

After this the procedure is the same as for booting with the @samp{ro}
option, at least until partway through the installation process.

Whether you use the ramdisk or not, at some point you will wish to boot
with your installed hard disk partition as root.  If you have not
installed boot code on your hard disk, and if you have not made a
special boot floppy using @sc{lilo} or some other method, you can still
do this using the MCC boot disk.  Indeed, if you have not used the
@samp{ramdisk} option, you must reboot in this fashion at least once.
To do so,
boot from the floppy.  At the LILO prompt, you need to give a command
such as this:

@example
ro root=302
@end example

where the number @samp{302} varies depending on which root partition
you intend to use.
If you follow the `normal' MCC installation procedure, this command is
printed for you just before the first reboot when you need to use it.
@iftex
@dosubind{cp}{booting}{with read-only @code{/}}@relax
@end iftex
Rebooting in this way uses the kernel on the boot disk, but mounts one of
the partitions on your hard disk as @code{/}, and it mounts that partition
in read-only mode.
This is now the normal way to boot, since it allows the system to check
and repair the root file system before any programs try to write to it.

When the kernel boots, you should see a message like this:

@example
Linux version 1.0.4 (root@@linux) #1 Wed Mar 30 23:49:33 GMT 1994
Partition check:
  hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >
@end example

The partition check should tell you what device you need to use
when you run @samp{fdisk}; for example, @code{/dev/hda} in the
above case.  Other possibilities are @code{/dev/sda}, @code{/dev/hdb},
@code{/dev/sdb}, @code{/dev/xda}, and so forth.

Whenever the kernel boots, it tries to explore your hardware, and messages
will appear describing what it finds.  If you have only one @sc{ide}
disk, you will see this message:

@example
hard disk I/O error
dev 0340, sector 0
  unable to read partition table of device 0340
@end example

This can be ignored; it means that the kernel cannot access a second hard
disk; of course, this is because it does not exist.
You may see similar messages which report that you do not have @sc{scsi}
devices, or that certain Ethernet hardware cannot be found.
You can give the kernel certain information which avoids the need to
probe for equipment; for more information, see
@ref{Parameters, , Passing parameters to the kernel}.

At some point in your initial boot from the MCC boot disk,
you should see the following messages:@*

@cartouche
@example
 Loading /etc/kbmap

 f   Run fdisk to manage the partition table.
 s   Set up a new swap partition.
 a   Activate an existing swap partition.
 m   Make a new file system on a partition.
 i   Install basic binaries.
 c   Check (and repair) an existing file system.
 e   Execute /bin/sh on an existing file system.
 r   Run a customise script.
 q   Quit.

 ? _
@end example
@end cartouche

The message @samp{Loading /etc/kbmap} means that the kernel is loading
the default (UK) keyboard configuration file from the root disk.
Then instead of getting
a shell prompt @samp{#}, you see a small menu.  The choices in the menu
help you execute several commands.
These commands will prepare your machine to hold Linux, and will
begin the installation process when you are ready to do so.
The commands appear on the menu more or
less in the order in which you need to select them.  To select a command,
type the letter which appears next to it, and then press @t{<RETURN>}.
This procedure differs from that in most other distributions of Linux.

@strong{Note}: It is not possible to get a shell prompt using the
MCC boot and root disks until @emph{after} you have installed Linux
on your hard disk.  The MCC @samp{init} program can then execute
the @code{/bin/sh} on your hard disk.

@node Running fdisk, Setting up, MCC boot, Installing
@section Editing the partition tables

To run @samp{fdisk} from the MCC root floppy, select @samp{f} from the menu.
@ifinfo
@pindex fdisk
@cindex partitions
@end ifinfo
@iftex
@dosubind{pg}{@code{fdisk}}{from MCC root floppy}@relax
@dosubind{cp}{partitions}{editing with fdisk}@relax
@end iftex
@xref{Fdisk, , @samp{fdisk}: the Linux partition table editor},
for more information about the @samp{fdisk} command.
First you need to specify the disk whose partition tables you will
edit.  The menu utility asks:

@example
Run fdisk on (block device; default = /dev/hda): _
@end example

At this point, press @t{<RETURN>} to accept the default.
@fiindex @code{dev/hda}
@fiindex @code{dev/hda}
@fiindex @code{dev/hdb}
@fiindex @code{dev/sda}
@fiindex @code{dev/sdb}
@fiindex @code{dev/xda}
@fiindex @code{dev/xdb}
@fiindex @code{hdb}
@fiindex @code{sda}
@fiindex @code{sdb}
@fiindex @code{xda}
@fiindex @code{xdb}
@code{/dev/hda}
is the first hard disk, @code{/dev/hdb} the second, @code{/dev/sda} the
first @sc{scsi} disk, @code{/dev/sdb} the second, @code{/dev/xda} the first
@sc{xt} disk, and @code{/dev/xdb} the second.  To select one of these, simply
type it after the prompt.  If you decide not to, the `block device' prompts
always accept @samp{q} as an answer, though sometimes the message
@samp{That is not a legitimate device} appears before quitting.

At this point the @samp{fdisk} prompt appears:

@example
Command (m for help): _
@end example

If you type @samp{m}, you will see the main menu for @samp{fdisk}:@*

@cartouche
@example
 Command action
    a   toggle a bootable flag
    d   delete a partition
    l   list known partition types
    m   print this menu
    n   add a new partition
    p   print the partition table
    q   quit without saving changes
    t   change a partition's system id
    u   change display/entry units
    v   verify the partition table
    w   write table to disk and exit
    x   extra functionality (experts only)

 Command (m for help): _
@end example
@end cartouche

We can give the command @samp{p} to print the partition table.
Here is a sample of the output printed on one of the machines I use:
@page

@example
Disk /dev/hda: 14 heads, 35 sectors, 978 cylinders
Units = cylinders of 490 * 512 bytes

   Device Boot  Begin   Start     End  Blocks   Id  System
/dev/hda1   *       1       1      98   23992+   4  DOS 16-bit <32M
/dev/hda3   *     263     263     426   40180   83  Linux native
/dev/hda4         427     427     977  134995    5  Extended
/dev/hda5         427     427     491   15924+  82  Linux swap
@end example

We can create a primary partition in slot 2, or another
logical partition after the swap space:

@example
Command (m for help): @emph{n}
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
@emph{p}
Partition number (1-4): @emph{2}
First cylinder (99-978): @emph{99}
Last cylinder or +size or +sizeM or +sizeK (99-262): @emph{262}

Command (m for help): _
@end example

The partition type (by default 83 for Linux native file systems)
is actually ignored in practice (unless you are using DR-DOS),
but I like to see things clearly when I look at partition tables;
I want sensible information to appear.  If I have a Linux/@sc{minix}
file system, I can change the partition type as follows:

@example
Command (m for help): @emph{t}
Partition number (1-8): @emph{3}
Hex code (type L to list codes): @emph{81}
Changed system type of partition 2 to 81 (Linux/MINIX)
@end example

Next we make the new partition active. In most cases this has no practical
effect, at least if you install @sc{lilo} in your master boot record.
If you use the DOS master boot record, you must have exactly one
active partition, while other programs (such as the OS/2 boot manager)
have their own rules.
@xref{Flags, , Active flags and system types}.
I like to be able to see which partitions are
bootable when the partition table is printed:

@example
Command (m for help): @emph{a}
Partition number (1-8): @emph{2}

Command (m for help): @emph{p}

Disk /dev/hda: 14 heads, 35 sectors, 978 cylinders
Units = cylinders of 490 * 512 bytes

   Device Boot  Begin   Start     End  Blocks   Id  System
/dev/hda1   *       1       1      98   23992+   4  DOS 16-bit <32M
/dev/hda2   *      99      99     262   40180   83  Linux native
/dev/hda3   *     263     263     426   40180   83  Linux native
/dev/hda4         427     427     977  134995    5  Extended
/dev/hda5         427     427     491   15924+  82  Linux swap
@end example

Being satisfied with this, we decide to save it.

@example
Command (m for help): @emph{v}
238664 unallocated sectors.
Command (m for help): @emph{w}
The partition table has been altered!

Calling ioctl() to re-read partition table.
  hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 >
Syncing disks.
@end example

Remember that it is a good idea to use the @samp{verify} command
before saving the tables.  The @samp{unallocated sectors} message
is just a warning; after all, we have no partitions in the area
from cylinder 492 to cylinder 977.

If everything works properly, you should see a list of available
partitions after the line @samp{Calling ioctl()} and before the
line @samp{Syncing disks}, just as in the above example.
But sometimes you will see a message like this one:

@example
Re-read table failed with error 16: Device or resource busy.
Reboot your system to ensure the partition table is updated.
@end example

This means that, if you have changed the partition tables, the
kernel has not read them.
@iftex
@dosubind{pg}{@code{fdisk}}{reboot after running}@relax
@end iftex
In this case you may run @samp{fdisk} again without rebooting the
system, but you @emph{must} reboot before running @samp{mkswap},
@samp{mkfs}, or installing Linux.
To reboot at this stage, give the answer @samp{q} at the menu prompt.

If the warning message does not appear, it is perfectly safe to
continue the installation without rebooting.

@node Setting up, Basic installation, Running fdisk, Installing
@section Preparing swap and file system partitions

Once partitions have been created, they need to be initialised before
they can be used for swapping or as file system partitions.  Previously
initialised swap partitions should be activated during installation,
so that you don't run out of memory.
It is a good idea to check existing file systems so that any
inconsistencies that may have arisen are corrected before you copy
new files onto them.  You can select any one of these functions from
the menu which appears after you boot the system in read-only mode.

@menu
* Initialising::   Initialising a swap partition.
* Activating::     Activating a swap partition.
* Creating::       Creating a file system.
* Repairing::      Checking and repairing an existing file system.
@end menu

@node Initialising, Activating, , Setting up
@subsection Initialising a swap partition

Before you can use a swap partition, you must initialise it.
@cindex initialising swap partitions
@iftex
@dosubind{cp}{swap partitions}{initialising}@relax
@end iftex
Once Linux is installed, you can do this with the @samp{mkswap} command.
To run @samp{mkswap} from the MCC root floppy, select @samp{s} from the
menu.  Here is a typical example:

@example
WARNING: This will destroy any files on this partition.
Do you want to continue (Y or N): @emph{y}
Run mkswap on (block device; default = /dev/hda5):
Setting up swapspace, size = 16302080 bytes
Adding Swap: 15920k swap-space
@end example

I find warnings of the type `Are you sure?' irritating, but I print
one here to remind you that this command overwrites an entire partition.
The default swap device is @code{/dev/hda5} because this is the first
logical partition, and it seems sensible not to put a swap partition
in one of the slots of the primary partition table, unless you have a
very small disk.  If you are using a different partition for swap,
type its name before pressing @t{<RETURN>}; for example, type
@code{/dev/hda2} in response to the `block device' query.

The maximum usable size of a swap partition is 16 Mb, or 16384 blocks of
1024 bytes each.
@iftex
@dosubind{cp}{swap partitions}{maximum size}@relax
@end iftex
If you try to initialise a partition larger than this for swap, you
are warned that some of this space will be wasted, and you can choose
to give up before doing so.  If you wish, you can use @samp{fdisk} to
reduce the size of the partition slightly, and you can add the extra
cylinders to another partition.
If you need more than 16 Mb of swap space, you may have up to 16 swap
partitions and swap files, each up to 16 Mb in size.

After the new swap partition is initialised successfully, the boot utility
activates it for you.

@node Activating, Creating, Initialising, Setting up
@subsection Activating a swap partition

If you install Linux on a disk which already contains an initialised
swap partition, you should activate it before doing anything else.
@cindex activating swap partitions
@iftex
@dosubind{cp}{swap partitions}{activating}@relax
@end iftex
On small systems, the installation may fail if you do not, and
on any system, this may make the installation a little faster.
Once Linux is installed, you can activate swap space with the @samp{swapon}
command, or put an entry in @code{/etc/fstab} to activate it automatically
at boot time.
To run @samp{swapon} from the MCC root floppy, select @samp{a} from the
menu.  Here is a typical example:

@example
Activate swapping on parition (block device; default = /dev/hda5):
Setting up swapspace, size = 16302080 bytes
Adding Swap: 15920k swap-space
@end example

Here again, the default swap partition is @code{/dev/hda5}.

@node Creating, Repairing, Activating, Setting up
@subsection Creating a file system

Creating a file system under Linux is like running the @samp{FORMAT}
utility under DOS.
@cindex creating a file system
@iftex
@dosubind{cp}{file system}{creating}@relax
@end iftex
Once Linux is installed, you can do this with the @samp{mkfs} command.
To run @samp{mkfs} from the MCC root floppy, select @samp{m} from the
menu.  Here is a typical example:

@example
@group
WARNING: This will destroy any files on this partition.
Do you want to continue (Y or N): @emph{y}
Run mkfs on (block device; default = /dev/hda1): @emph{/dev/hda2}
@end group
Create an ext2 file system (Y or N): @emph{y}
mke2fs 0.5 ALPHA, 15-Mar-94 for EXT2 FS 0.5, 94/03/10
@end example

MCC Interim Linux currently supports two kinds of file system:
the @i{minix} file system and the @i{ext2} file system.

The @dfn{minix} file system is named after the @sc{minix} operating
system.
@cindex minix file system
@iftex
@dosubind{cp}{file system}{minix}@relax
@end iftex
It comes in two slightly different versions: one in which
file names cannot be more than 14 characters long, and one in which
file names cannot be more than 30 characters long.  Partitions with
the 14 character limit are actually compatible with @sc{minix} and
can be mounted under that system.  The 30 character limit is not
compatible with @sc{minix}, but Linux treats the two versions as
identical in most respects.  The @i{minix} file system is older and
less subject to change, and perhaps slightly more reliable.
A @i{minix} file system cannot have more than 64 Mb, or 65536 blocks
of 1024 bytes, on a single partition.

@strong{Note}: As of version 1.0+, MCC Interim Linux will not install
properly on a @i{minix} file system unless the maximum length of filenames
is 30 characters.
@iftex
@dosubind{cp}{minix file system}{30 character limit}@relax
@end iftex
If you have an older @i{minix} file system, back it up
and run @samp{mkfs} before installing.
In any case, we do
not recommend using the 14 character version unless you need to
maintain compatibility with the @sc{minix} operating system.

The @dfn{ext2} file system was developed for Linux and will eventually
become the normal Linux file system.
@cindex ext2 file system
@cindex ext file system
@iftex
@dosubind{cp}{file system}{ext2}@relax
@dosubind{cp}{file system}{ext}@relax
@end iftex
An older version of this system, the @dfn{ext} file system, is now
quite stable, but we do not recommend its use, and MCC Interim
Linux does not support it any longer.  File names in the @i{ext2} file
system may be up to 255 characters long, and a single partition
may contain up to 4 terabytes (4 million megabytes).  If you tell the MCC
installation utility that a file system is not an @i{ext2} file system, it
assumes that it is a @i{minix} file system with 30 character filenames.

@node Repairing, , Creating, Setting up
@subsection Checking and repairing an existing file system

It is a good idea to check file systems once in a while, particularly
before you install a new version of Linux on a file system which
already exists.
@cindex repairing a file system
@iftex
@dosubind{cp}{file system}{repairing}@relax
@end iftex
Once Linux is installed, you can do this with the @samp{fsck} command.
This is the Unix equivalent of the DOS command @samp{CHKDSK}.
To run @samp{fsck} from the MCC root floppy, select @samp{c} from the
menu.  Here is a typical example:

@example
Run fsck on (block device; default = /dev/hda1): @emph{/dev/hda3}
Does this device contain an ext2 file system (Y or N): @emph{y}
Check for bad blocks (Y or N): @emph{y}
Do you want automatic fixing (Y or N): @emph{y}
Running command: badblocks -s /dev/hda3 40180
Peak memory: Memory used: 143360, elapsed time:  9.341/ 0.660/ 2.020
@end example

The check for bad blocks is not strictly necessary, but it is a good
idea to check older disks once in a while.
This check is not available for @i{minix} file systems.

Just as when you create a file system, the root floppy assumes
that a Linux
file system is either a @i{minix} file system or an @i{ext2} file system.
@pindex fsck
The @samp{fsck} program reads through a file system, which is usually
described in some detail and with a considerable amount of redundant
information.  If the information is inconsistent, @samp{fsck} does
one of two things:

@enumerate
@item In @dfn{automatic} mode, it tries to fix all problems as well as it can.
@item In @dfn{interactive} mode, it asks you before doing anything.
@end enumerate

If you answer @samp{y} to the query about automatic fixing, @samp{fsck}
runs in automatic mode and fixes everything it can.  This may be
dangerous if the file system is badly corrupted, since the program
might delete a file you wish to keep.  In my view, this is very
unlikely, and I nearly always run @samp{fsck} in automatic mode.
If you answer @samp{n} to the query about automatic fixing, @samp{fsck}
runs in interactive mode; otherwise, it runs in automatic mode.

File systems usually become corrupt when a system is shut down or
rebooted improperly; for example, while a file or directory is being
created or deleted.  Chances are that if a file is being written when
you reboot, you will lose all or part of the file irrevocably.

@node Basic installation, Installing packages, Setting up, Installing
@section Installing basic files from the MCC disks

The description of a basic installation or upgrade can be simplified
if we consider the read-only and ramdisk procedures separately.

@menu
* Read-only::   Installing base packages using the @samp{ro} option.
* Ramdisk::     Installing base packages using the @samp{ramdisk} option.
@end menu

@node Read-only, Ramdisk, , Basic installation
@subsection Installing base packages using the @samp{ro} option

When you have set up the swap and file system partitions, you can select
the @samp{install} option from the menu with the @samp{i} command.
@cindex installing
@cindex mounting partitions
The following dialogue shows how to specify partitions to be mounted:

@example
Which device contains the file system you wish to be mounted
on '/'?  Give a name in the form '/dev/hda1', or type
'q' to quit.
This file system is on (block device; default = /dev/hda1): @emph{/dev/hda2}
Does this device contain an ext2 file system (Y or N): @emph{n}

Is there another partition you wish to mount?  If so, give the
pathname it will have in the installed system, such as '/usr/src'
with a slash at the front and no slash at the end.  (Upper case is
not allowed.)  If not, type 'n': @emph{n}
@end example

You must always give directories moving away from the root of
the tree: in other words, if you intend to mount @code{/dev/hda8} on @code{/},
@code{/dev/hda7} on @code{/usr}, and @code{/dev/hda6} on @code{/usr/src},
then you must give @code{/} first, then @code{/usr}, and then @code{/usr/src}.
If you specify another directory here, for
example, @code{/usr/src}, then you are asked for the block device where it
lives, and the type of file system it contains.

After you type @samp{n} to the request for another directory, you should
see some messages as the @i{Base} package gets installed:
@cindex Base package
@iftex
@dosubind{cp}{installing MCC packages}{from the root floppy}@relax
@end iftex

@example
654 blocks
Installing Base.tgz
Base (part 1) contains basic binaries and text files for Linux.
....................................................................
2701 blocks
Making holes in lib/ld.so...
There are 4096 byte holes out of 17412 bytes in `lib/ld.so'.
Making holes in lib/libc.so.4.5.21...
There are 349184 byte holes out of 623620 bytes in `lib/libc.so.4.5.21'.
Making holes in libm.so.4.5.21...
There are 94208 byte holes out of 107524 bytes in `libm.so.4.5.21'.
HOSTNAME: "linux"
Verifying Base.crc.
@end example

The `blocks' messages refer to 512-byte blocks, half the size of the file
system blocks.
@pindex makehole
@cindex sparse files
The @samp{Making holes} messages come from the @samp{makehole} program,
which allows us to save nearly half a megabyte of disk space by converting
the shared libraries to `sparse files'.

@samp{Verifying} refers to the cyclical redundancy check by the @samp{brik}
program.
@iftex
@dosubind{pg}{@code{brik}}{verifying MCC packages}@relax
@end iftex
@cindex checksum
@cindex verifying files
After checking, the crc file is moved to @code{/tmp}, so that you can
check later to see whether anything has changed.
There is no verification for
most man pages, or for files (like @code{/etc/fstab}, for example) which are
edited by the installation programs.  If a file has a bad checksum,
a message appears like this one:

@example
BAD sbin/init
@end example

This warns you that something is wrong.  If there is a small
error (caused perhaps by a bad spot on your floppy?), you might have
only one bad file, but usually there are several.  The @samp{df} listing
(which includes all mounted disks) tells you how full your file systems
are getting.  This can be useful if you have insufficient
space to install further packages.

Usually you will reboot the system at this point during an
installation or upgrade.  If you choose not to do so, you can start
a shell, and you can explore the half-installed system.  If you
do this, you will see this message:

@example
Please type CTRL-D to reboot, not 'reboot' or 'shutdown'.
@end example

This is because the system is set up in an odd way.  The root partition
(the booted floppy) is mounted in read-only mode, and the usual @samp{mount}
and @samp{umount} programs will not work properly.  Similarly, the
@samp{reboot},
@samp{halt}, and @samp{shutdown} utilities are not able to unmount file
systems, which consequently are likely to become corrupt during the shutdown.
If you type CTRL-D or @samp{exit}, you will again see the prompt

@example
Reboot the system now (Y or N): _
@end example

If you answer @samp{y}, you should see a message like this:

@example
Unmounted /dev/hda3
Unmounted /dev/hda2

Type 'rw root=302' at the LILO prompt.

If you have just installed LILO on your hard disk, then remove any disk
from the floppy drive.  Otherwise, place the boot floppy in the drive.
Then press <RETURN>.  If the system doesn't reboot, press the RESET button.
@end example

The message @samp{rw root=302} is important, since you need to type it
after the system has rebooted and printed the LILO prompt.
The message printed at that time will jog your memory if you forget
this, or if you did not write it down before pressing @t{<RETURN>}.
The most important part of the message
is the number @samp{302}, which varies depending on the partition you
wish to be mounted as @code{/}, the root of the new file system.

Sometimes the reboot at this point fails, especially if you remove
the floppy disk from the drive as instructed.  I have left the
instructions as they are, simply because most people would find it
a bit tricky during their first installation to fumble the root disk
out of the drive, and the boot disk into the drive.  If the reboot
fails on its own, simply press the @t{RESET} button, or power off and
then power on again.

After you reboot and type the @samp{rw root=@i{xxx}} command at the
LILO prompt, leave
the boot disk in the floppy drive so that installation can continue.
You should see the following messages:

@example
140 blocks
Installing base.tgz
Base (part 2) contains basic text and binary files.
.................................................................
2665 blocks
Verifying base.crc.
@end example

At this time the kernel and its @code{psdatabase} are installed,
followed by part 2 of the base package.
Then you are asked this question:

@example
Do you wish to change the default keyboard map (Y or N): _
@end example

The default keyboard map is the one on the root disk, which is
for the UK keyboard unless you have changed it.
@fiindex @code{etc/kbmap}
@fiindex @code{kbmap}
@cindex keyboard map files
@cindex map files, keyboard
If you have access to a Linux system, you can take any keyboard
map acceptable to the kbd-0.85 utilities and copy it onto the
root disk before installation, replacing the etc/kbmap file
which is already there.  This will make your national keyboard
available during all stages of the installation process.  I expect
various ftp sites in countries with keyboards quite different from
the UK keyboard will be willing to make a local version of the
root disk available.

If you do not wish to keep the default keyboard map, or if you are
uncertain, answer the question with @samp{y}, and you will see this
message:

@example
 1  be-latin1     8  es           15  gr-latin1    22  sf
 2  defkeymap     9  es2          16  no           23  sf-latin1
 3  dk           10  fi           17  no-latin1    24  sg
 4  dk-latin1    11  fi-latin1    18  no-latin1+   25  sg-latin1
 5  dvorak       12  fr           19  pl           26  uk
 6  dvuk         13  fr-latin1    20  ru           27  us
 7  emacs        14  gr           21  russian

Select the default keytable for this machine (0 to quit): 26
Loading etc/kbmap
@end example

These list the keyboard map files installed in part 2 of the base
package.  The file corresponding to the number you select is copied
to @code{/etc/kbmap}, where it is loaded each time your system boots.

Next you are able to install the @i{tcpip} package:

@example
Do you wish to install networking software (Y or N): y
Installing tcpip.tgz
Tcpip contains networking programs, daemons, and configuration files.
These will not work unless your kernel was compiled with tcpip.
.....................................................................
1470 blocks
Compressing formatted man pages
Verifying tcpip.crc.
@end example

The networking software should work even if you do not have
Ethernet hardware, as long as networking is configured into your
kernel.  In any case you must configure the networking software
before it can run.
@pindex install.net
You may do this at any time by giving the @samp{install.net} command,
but the installation procedure will configure it now if you wish.

@example
You may configure networking even if you have no Ethernet card
by selecting the default IP address 127.0.0.1.  If you have a
supported Ethernet card, you need to know your real IP address,
and you should know the address of your gateway machine and of
a domain name server before you configure it.  If there is no
gateway or name server machine, you may use 127.0.0.1 for it.

Configure networking now (Y or N): _
@end example

If you answer @samp{y}, then the software is configured exactly as
described in @ref{Tcpip, , Configuring the @i{tcpip} package}.
If you answer @samp{n}, the following message appears:

@example
The 'install.net' command will configure networking for you.
@end example

The installation continues by giving you the opportunity to install
@sc{lilo} boot code either on a floppy or on your hard disk.
@xref{LILO, , Installing @sc{lilo} on a floppy or hard disk}.
If you do not wish to do this, you may create a conventional boot floppy
instead.
@xref{Conventional, , Making a conventional boot floppy}.

If you do not create a boot floppy or install @sc{lilo} boot code on
your hard disk, you will not be able to boot your newly installed
system, unless, of course, you use some boot loader which is not
included in the MCC Interim distribution.
You may, of course, continue to use the MCC boot disk with the
command @samp{rw root=@i{xxx}} at the LILO prompt.

At this point in the installation you may install other MCC packages
if you wish.
@xref{Installing packages, , Installing the MCC Interim packages}.

@node Ramdisk, , Read-only, Basic installation
@subsection Installing base packages using the @samp{ramdisk} option

If you have used the @samp{ramdisk} option at boot time, you must
take the same initial steps that you take when you use the @samp{ro}
option:
set up partitions, make swap space, make file systems, and select the
menu option to install with the @samp{i} command.
This section explains the differences between the subsequent stages of
an installation or upgrade using the @samp{ramdisk} option,
and the subsequent stages using the @samp{ro} option,
as explained above.
@xref{Read-only, , Installing base packages using the @samp{ro} option}.

After part 1 of the base package has been installed, part 2 is installed
automatically, without rebooting.  You may install and configure the
@i{tcpip} package as well.  If you install the networking software
without configuring it at this time, you should not give the command
@samp{install.net} until after you have rebooted, and a message warns
you of this during the installation process.

After you have installed or omitted the @i{tcpip} package, you may
wish to configure @sc{lilo}.  You should not remove the root
disk from drive 0; therefore you cannot store the @sc{lilo} boot
code on a floppy at this time.
@pindex install.lilo
If you wish to make a floppy
to test the @sc{lilo} installation before writing the boot code to
your hard disk, reboot first, log in as root, and give the command
@samp{install.lilo}.
If you wish to install the @sc{lilo} boot code on a test floppy, you
may do so now.  If you are confident that it will work, you may
install it directly on your hard disk, without creating a test floppy.

At the end of the basic installation, you are allowed to install
MCC Interim packages, just as at the end of the installation which
follows the @samp{ro} procedure.  Because you are not allowed to remove
the root floppy from drive 0 at this time, you may not use that drive
to install the packages.  If you wish to install packages from floppy
disks in drive 0, or from a directory which you will mount using @sc{nfs},
reboot the system, log in as root,
perhaps mount a remote file system using @sc{nfs},
and give the
command @samp{/tmp/bootinstall}.  You may install packages at this
point from a floppy in drive 1, from a directory already mounted
during the @samp{install} procedure, or from a directory in an unmounted
MS-DOS, @i{minix}, or @i{ext2} file system on the same machine.

If you do not wish to reboot immediately after installation,
you may start a shell on the newly installed partition and browse.
You should bear in mind that many commands will not work properly,
since the root disk is not mounted as @code{/}, but as @code{/root}.

When you have browsed, leave the shell with the @samp{CTRL-D} or
@samp{exit} command, and answer @samp{y} to the question about
rebooting.  You will see a message

@example
Type 'rw root=@i{xxx}' at the LILO prompt.
@end example

in case you have not installed the @sc{lilo} boot code on your
hard disk.  As with the @samp{ro} procedure, the reboot may fail
at this point.  If it does, press the @t{RESET} button or, if
necessary, switch the power off and on again.

@node Installing packages, Boot floppy, Basic installation, Installing
@section Installing the MCC Interim packages

After you have installed the packages on the boot and root disks, you
probably wish to install other MCC Interim packages.
You can do this in one of three ways:

@itemize @minus
@item
The MCC installation allows you to install packages immediately after
installing the basic packages.  Certain restrictions apply at this
point if you chose the @samp{ramdisk} option at boot time.
@xref{Ramdisk, , Installing base packages using the @samp{ramdisk} option}.

@item
The MCC distribution installs the command @samp{/tmp/bootinstall}, which
allows you to install many packages from floppies or from a single
directory.
@pindex bootinstall
@fiindex @code{bootinstall}
@fiindex @code{tmp/bootinstall}
This is most useful for installations using @sc{nfs}, or when
you wish to test installed @sc{lilo} boot code before installing
packages.

@item
The MCC distribution installs the command @samp{mccinstall}, which
allows you to install one package at a time.
@pindex mccinstall
@end itemize

In the present section we discuss the first and second of these ways of
installing packages.  Whether you give the @samp{/tmp/bootinstall}
command explicitly, or have the installation process give it, you
should see the following message:@*

@cartouche
@example
 Which drive will you use to install Linux packages:

 1  drive A:  5.25 inch HD floppies
 2  drive A:  3.5  inch HD floppies
 3  drive B:  5.25 inch HD floppies
 4  drive B:  3.5  inch HD floppies
 5  A directory on an unmounted partition on this machine
 6  A directory already mounted at this time
 7  No installation at this time

 ? _
@end example
@end cartouche

(If you are in the middle of a @samp{ramdisk} installation, options 1 and 2
do not appear.)
If you are installing from floppies, give one of the answers 1 -- 4,
whichever is appropriate.
@iftex
@dosubind{cp}{installing MCC packages}{using floppy disks}@relax
@dosubind{cp}{installing MCC packages}{from a DOS directory}@relax
@dosubind{cp}{installing MCC packages}{from a Linux directory}@relax
@end iftex
If you are installing from a directory, and if that
directory is currently mounted,
answer @samp{6}.  If you copied the packages to a directory on a
DOS partition, or on a Linux partition which is not currently mounted,
answer @samp{5}.

If you answer @samp{5}, you must give the name of the unmounted
partition which contains the directory which contains the packages.
The partition must be a DOS partition or contain a @i{minix} or @i{ext2}
file system.  You are prompted for the name of the partition:

@example
What is the block device on which this partition lives?
@end example

To this you should answer, for example, @code{/dev/hda1}.

If you are going to mount a partition using @sc{nfs}, then you must
have networking software installed, configured, and running before
you can mount the remote file system.
@iftex
@dosubind{cp}{installing MCC packages}{using NFS}@relax
@end iftex
Normally the networking software is not running during the MCC
installation, and you should not start it if you have a ramdisk
mounted as @code{/}.
@pindex install.net
If you did not configure networking software during the basic
MCC installation, give the command @samp{install.net} and run
@samp{/etc/rc.net} before trying to mount a file system from another machine.

Whichever method you use to make packages accessible, you must then
answer this question:

@example
Do you wish to have a prompt before each package (Y or N): _
@end example

I recommend answering @samp{y}, which allows you to omit packages
which you do not wish to install.  On the other hand, when I install
Linux on several machines at once, I make certain the disks contain
only packages which I wish to install on all machines, and I answer
@samp{n} at this point.  If you are confident that only desirable
packages will be installed, and that you have enough disk space to
hold them, answer @samp{y}, then drink some tea while the packages are
installed.  At this juncture you may see all, some, or none
of the following dialogue, depending on the options you chose
previously:

@example
If you wish, you may install other parts of MCC Interim Linux
from a directory on another machine, remotely mounted using @sc{nfs},
or from a currently available directory mounted in some other way.
This will only work if you have mounted the remote directory
If the directory is not accessible now, do you wish to quit? (Y or N): @emph{n}
Do you wish to install from a currently mounted directory? (Y or N): @emph{y}
/dev/hda1 is mounted on /mnt.  In which directory are the packages found?
@emph{/mnt/mcc}
@end example

After you reach this point, packages are installed from the specified
directory or floppy drive.  The messages which appear are similar to those
for the basic packages on the root and boot floppies, and include the
following information:

@example
Baseman contains formatted man pages for the base package.
Bison contains the GNU yacc-compatible parser generator.
Elisp contains lisp files for GNU emacs 19.22.
Emacs contains GNU emacs 19.22, except for lisp files.
Emacsxtr contains the portions of GNU emacs which are not contained
    in other emacs packages in the MCC Interim distribution.
Extrainf contains extra info files for bison, emacs, gas, gcc, texinfo,
    and gdb.
Extralib contains additional libraries for gcc, release 2.5.8.
Flex contains the GNU clone of lex, the lexical analyser generator.
Gawk contains the GNU version of the awk programming language.
Gcca contains executables, include files, and man pages for gcc 2.5.8.
Gccb contains libraries and internal binaries for gcc, release 2.5.8.
Gdb contains the GNU debugger.
Gpp contains the GNU C++ compiler, release 2.5.8, except for those
    files contained in the gcc packages.
Gprof contains the GNU profiler gprof and its associated library files.
Groff contains the GNU clone of the nroff/troff text formatter.
Info contains GNU info, makeinfo, and selected info files.
Kermit contains the Kermit file transfer and serial communications program.
Linux contains the kernel source files for Linux version 1.0.
Lp contains programs and manpages for printing.
Mail contains binaries and support files for smail and for elm.
Manpages contains all unformatted manual pages which are distributed
    (formatted) as part of MCC Interim linux.
Patches contains all patches used to compile the binaries included in the
    current MCC Interim distribution.
Progman contains formatted manual pages from sections 2, 3, and 9.
Timezone contains data for world timezones and related programs.
Words contains a /usr/dict/words file.
The kernel in ipide has no SCSI or xd support.
The kernel in wd has no SCSI or xd support.
    It contains support only for Western Digital 80*3 Ethernet cards.
@end example

If you have asked to be prompted, the message is printed before the
prompt, so that you know what you are accepting or rejecting.
During a floppy installation you will also see the following
message from time to time:

@example
You may now remove the floppy disk from the drive.  If you wish
to install from another disk, then put it in the drive and
type 'r' when ready; or type 'q' to stop: _
@end example

If your disks are DOS disks, you should have no other messages at mount
time except @samp{VFS: Disk change detected on device 2/28}, or some such
message, depending on your disk drive.
But if your disks contain @i{minix} or @i{ext2} file systems, you will get
some error messages.  I allow these to appear, since they might
sometimes contain useful information.

@node Boot floppy, , Installing packages, Installing
@section Creating a boot floppy

After you install the last of the MCC packages, typing @samp{q} if
necessary to say that you have no more floppies, the installation
procedure allows you to create a boot floppy, using either @sc{lilo}
or your newly installed kernel.  You may also install @sc{lilo} on
your hard disk if you wish, though it is safer to make a boot floppy
first.

@menu
* LILO::          Installing @sc{lilo} on a floppy or hard disk.
* Conventional::  Making a conventional boot floppy.
* Special::       Making a special boot floppy using @sc{lilo}.
@end menu

@node LILO, Conventional, , Boot floppy
@subsection Installing @sc{lilo} on a floppy or hard disk

@sc{lilo} is Werner Almesberger's utility for booting Linux: it stands
for @i{LInux LOader}.
@cindex LILO
@cindex installing LILO
@pindex lilo
@iftex
@dosubind{cp}{boot floppy}{using LILO}@relax
@end iftex
It is quite versatile.  You can install it in the Master Boot Record
on your hard disk, so that it functions as the primary boot program
when your system boots, or you can install it in any partition on
your hard disk, or on a floppy disk.  @sc{lilo} can allow you to
select from up to 16 possible Linux boot images, or to boot
other operating systems.  It can pass special options to Linux
kernels, such as an instruction to boot in single user mode, or to
mount the root partition in read-only mode.  It can boot a default
option unless you intervene during boot, and it can force you to
choose one of its images interactively.  It can also protect some or all
of your boot options by requiring a password at boot time.

The @samp{lilo} command, with its support files, is contained in part 2
of the MCC @i{base} package.
@pindex lilo
@pindex install.lilo
@fiindex @code{sbin/lilo}
@fiindex @code{lilo}
@fiindex @code{etc/lilo.conf}
@fiindex @code{lilo.conf}
@fiindex @code{etc/README.lilo}
@fiindex @code{README.lilo}
The support files include @code{/etc/README.lilo}, which describes many
of the features of this utility, and @code{/etc/lilo.conf}, the configuration
file which you may wish to edit.
@xref{Configuration, , Editing the system configuration files}.
The binary support files for @sc{lilo} are now installed in
the @code{/boot} directory.
The MCC installation procedure runs the command @samp{install.lilo},
a simple utility for installing @sc{lilo} boot code,
which asks you the following questions:

@example
The LILO utility allows you to boot Linux from a hard disk.
It can give you the choice of booting one or more versions of Linux,
or of booting one or more other operating systems.  LILO installs a
boot program in any partition (a complex option, since you must set
active flags properly), or in the Master Boot Record (a simple option),
or on a floppy disk (a safe option, since you can test for problems).
Would you like LILO to install a boot program now? @emph{y}

Where should the boot code go?  You may override this later to put the
boot code on a floppy instead of the hard disk.  Possible choices
include /dev/hda (the master boot record on your first hard disk),
/dev/hda2 (the partition you are installing Linux on),
or /dev/fd0 (floppy disk 0, DOS floppy A:).
Give me the name of a block device, or 'q' to quit.
The default is /dev/hda: _
@end example

The default at this point is chosen by taking the name of your root
partition (for example, @samp{/dev/hda3}), removing the end of its
name (leaving @samp{/dev/hd}), and adding @samp{a} (thus producing
@samp{/dev/hda} in this case).  I recommend accepting this default.

At this point, @sc{lilo} needs to construct a `database' of bootable
images and systems.
@fiindex @code{etc/lilo.conf}
@fiindex @code{lilo.conf}
This information is saved in the file @code{/etc/lilo.conf}, which
tells the @sc{lilo} installer what to install, where, and how.
Initially this file contains no systems or images; you must add
each one which you wish @sc{lilo} to be able to boot, including the
system you have just installed.

@example
LILO will boot by default the first system you specify.
Others must be selected by taking special action at boot time.
Is the first system you wish to add a version of Linux or not?
Answer 'L' for Linux, 'o' for other systems, 'q' to quit:  (L, o, q): @emph{l}

The default Linux image in this installation is /boot/vmlinuz.
Press <RETURN> if you are using this image, or if you have a
different image somewhere else which is currently mounted,
give its pathname: _

What would you like to call this option?  The default is 'linux'.
Remember, you may not give the same name to two options: _

Is the next system you wish to add a version of Linux or not?
Answer 'L' for Linux, 'o' for other systems, 'i' to install:  (L, o, i): @emph{o}

In what partition does this other system live?  Press <RETURN> if
you do not wish to add this option.  Otherwise give an answer
like /dev/hda1: @emph{/dev/hda1}

What would you like to call this option?  The default is 'dos'.
Remember, you may not give the same name to two options: _

Is the next system you wish to add a version of Linux or not?
Answer 'L' for Linux, 'o' for other systems, 'i' to install:  (L, o, i): @emph{i}
@end example

This little loop repeats, expecting the answer @samp{L} for a Linux
image, @samp{o} for another operating system, and @samp{i} when you
have no more options to add.
@fiindex @code{boot/vmlinuz}
@fiindex @code{vmlinuz}
@fiindex @code{boot/vmlinuz.old}
@fiindex @code{vmlinuz.old}
You must be careful not to give the
same name to two options.  The @samp{L} can be typed in lower case,
but the prompt uses upper case because @samp{l} looks too much like
the digit @samp{1}.
The file @code{/boot/vmlinuz} is installed from the MCC boot floppy.
When your list is finished, and if you have not added an option named
@samp{linux.old}, @samp{newinstall} inserts such an option to boot an old
kernel named @code{/boot/vmlinuz.old} if it exists when @sc{lilo} is run.
@fiindex @code{usr/src/linux-mcc/install}
@fiindex @code{linux-mcc/install}
The MCC extra kernel packages
produce such a file, and the script @samp{/usr/src/linux-mcc/install}
produces such a file whenever you compile a new kernel.

@example
Now where would you like to install LILO at this time?  You may put
it on /dev/fd0 to be safe; be sure you have a formatted floppy disk
in this drive NOW, and that it is a device you can boot from, not
your DOS B: drive.  You may install it in /dev/hda.
Give me the name of a block device, or 'q' to quit.
The default is /dev/fd0: /dev/hda
Added linux
Added dos
Skipping /boot/vmlinuz.old
@end example

This installation of @sc{lilo} may fail if you have an odd disk, whose
geometry @sc{lilo} is unable to determine when it is run.
@fiindex @code{etc/disktab}
@fiindex @code{disktab}
In that case, you can log in, edit the file @code{/etc/disktab}
to insert the correct geometry for your disk, then give the command
@samp{/etc/lilo/newinstall} to try again.
The @samp{lilo} command usually asks you to edit this file if you need
to do so.  The file itself contains a sample entry, and the file
@code{/etc/README.lilo} contains more information about the
@code{/etc/disktab} file.

The boot floppy produced at this point will allow you to test whether
the @sc{lilo} boot code works properly before you attempt to install it
on your hard disk.
After rebooting from the test floppy, log in as root and give the
command @samp{lilo} to place the boot code in its permanent home.

Sometimes it is necessary to pass disk or other parameters to the kernel
explicitly.  These can be included in the file @code{/etc/lilo.conf}
so that you do not need to type them explicitly every time you boot
Linux.
@xref{Parameters, , Passing parameters to the kernel}.

If you do install @sc{lilo} boot code on your hard disk, and for some
reason it fails, or you simply wish to remove it, your original Master
Boot Record is saved in the file @code{/boot/boot.@i{xxxx}}, where
@samp{@i{xxxx}} is a hexadecimal number based on the drive number.
@fiindex @code{boot/boot.}xxxx
@fiindex @code{boot.}xxxx
@iftex
@dosubind{cp}{LILO}{removing from hard disk}@relax
@end iftex
You can restore this with the command @samp{dd if=/etc/lilo/boot.0300
of=/dev/hda}, using the appropriate names for your system.
You should be very careful: the saved Master Boot Record restores
everything to its original state, including the first four partitions
described in the primary boot sector; in other words, this command
can delete partitions or make them inaccessible if you have changed
your partition table since it was first created.

If you have MS-DOS version 3.3 or later, you can create a normal
DOS Master Boot Record with the DOS command @samp{FDISK /MBR}.
Be certain that the DOS partition is marked active (by using @samp{fdisk})
before you give this command.

@node Conventional, Special, LILO, Boot floppy
@subsection Making a conventional boot floppy

If you do not install @sc{lilo} boot code on your hard disk during the
MCC installation, you may wish to make a conventional boot floppy.
@cindex conventional boot floppy
@iftex
@dosubind{cp}{boot floppy}{conventional}@relax
@end iftex
The @samp{ro} installation procedure asks you this question
if you do not choose to install @sc{lilo} boot code:

@example
You can now make a conventional boot floppy which will boot
your newly installed Linux system.  To do this, you must put a
formatted high density diskette into your A drive and answer 'y'.
If you wish to do this now, answer 'y'. (Y or N): _
@end example

If you answer @samp{y}, this simply copies your kernel to the
floppy in drive 0 using the command

@example
/bin/dd if=/boot/vmlinuz of=/dev/fd0 bs=3072
@end example

The resulting disk should boot under any circumstances.
Unfortunately, you cannot pass parameters to this kernel, as you can
if you use @sc{lilo} to boot; thus this disk is not useful if you
have a difficult hard disk or some other hardware problem.
But for most of those people who
cannot get @sc{lilo} to work, or who prefer not to use it,
this is a way of booting Linux without messing about with
the partition tables.  This should not really be necessary, since there
are very few known problems with @sc{lilo}.
Of course, you may need to put correct parameters in @code{/etc/disktab}
for a few awkward disks, or to use the @samp{append} feature to pass
parameters to the kernel.
@xref{Parameters, , Passing parameters to the kernel}.

@node Special, , Conventional, Boot floppy
@subsection Making a special boot floppy using @sc{lilo}

It is useful to be able to create a floppy which boots, and which can
be used as a recovery floppy or to boot with your hard disk as root.
It is hard to fit all the files you may wish onto a floppy,
particularly if you must boot from a 5.25 inch floppy.  The
following instructions should work in the simplest cases.

First, create a file, for example @code{/tmp/lilo.conf} containing
the following lines:

@example
install = /mnt/boot.b
delay = 20
compact
vga = normal
backup = /dev/null
map = /mnt/map
boot = /dev/fd0
image = /mnt/vmlinuz
  root = /dev/fd0
  ramdisk = 0
  read-write
@end example

Then place a new floppy in drive 0, and give the following commands:

@example
# fdformat /dev/fd0H1440             # for a 3.5 inch floppy
# mkfs.minix -c -n14 /dev/fd0 1440
# fdformat /dev/fd0h1200             # for a 5.25 inch floppy
# mkfs.minix -c -n14 /dev/fd0 1200
# mount -t minix /dev/fd0 /mnt
# mkdir -p /mnt/etc /mnt/lib /mnt/bin /mnt/dev /mnt/mnt
# ln -s bin /mnt/sbin
# cp -p /boot/boot.b /boot/vmlinuz /mnt
# rdev /mnt/vmlinuz /dev/fd0
# rdev -R /mnt/vmlinuz 0
# cp -p /lib/ld.so /lib/libc.so.4.5.21 /mnt/lib
# mv /mnt/lib/libc.so.4.5.21 /mnt/lib/libc.so.4
# (cd /bin;tar cf - cat chown cp dd df ln ls mkdir mount mv \
 rm rmdir sh sync umount)|(cd /mnt/bin;tar xfp -)
# (cd /dev;tar cf - console fd0 fd1 null tty tty? hd* sd* xd*)|\
 (cd /mnt/dev;tar xfp -)
# (cd /sbin;tar cf - badblocks fdisk fsck.* mkfs.* mkswap swap* \
 tune2fs)|(cd /mnt/bin;tar xfp -)
# echo "/dev/fd0 / minix rw 0 0" >/mnt/etc/mtab
# lilo -C /tmp/lilo.conf
Added vmlinuz
# df /dev/fd0
Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/fd0                1183    1078      105     91%   /mnt
# umount /mnt
@end example

This example used a small kernel (@code{vmlinuz}) 252420 bytes in
size.  If your kernel is much larger (for example, the 363012 bytes
of the MCC kernel with CD ROM drivers included), it will be too big
for a 5.25 inch floppy with all of the above commands.

If you create and boot from this floppy, you must be careful not
to leave the file system on it dirty.  When you are finished using
it, give the command @samp{umount -a} before pressing @t{CTRL-ALT-DEL}
or the @t{RESET} button.

@node Adapting, Using, Installing, Top
@chapter Tailoring MCC Interim Linux to Your Taste

There are several changes which you might make to your newly
installed Linux system, whether to make it run better on your machine,
or to adapt it to suit your personal taste.  Some of these changes
are discussed in this chapter.

@menu
* Kernel::          Recompiling the kernel.
* Ethernet cards::  Setting up Ethernet cards.
* Tcpip::           Configuring the tcpip package.
* Configuration::   Editing the system configuration files.
* Parameters::      Passing parameters to the kernel.
* XFree86::         Installing the XFree86 software.
@end menu

@node Kernel, Ethernet cards, , Adapting
@section Recompiling the kernel

There are many good reasons why you might wish, or even need,
to recompile the kernel.
@cindex recompiling the kernel
@iftex
@dosubind{cp}{kernel}{recompiling}@relax
@end iftex
You may wish to remove or add drivers or file systems, to add
some of the available patches,
to remove features you may not need, such as maths coprocessor emulation,
or to add support for more than 16 Mb of @sc{ram}.

To recompile the kernel, you should install the @i{gcca},
@i{gccb}, and @i{linux} packages from the MCC distribution.
Then @samp{cd} to @code{/usr/src/linux-mcc}.
Then type @samp{make config} and answer the questions with @samp{y}
or @samp{n}.  Finally give these commands:

@example
make dep
make zlilo
@end example

The last command installs the newly compiled kernel in /boot and uses
@sc{lilo} to prepare to boot from it.
@fiindex @code{boot/vmlinuz.old}
@fiindex @code{vmlinuz.old}
@pindex psupdate
It also runs the command @samp{psupdate}
to change the file @code{/etc/psdatabase}
so that the @samp{ps} commands work with the new kernel.
The @samp{make zlilo}
command also saves the old @code{/boot/vmlinuz} as @code{/boot/vmlinuz.old}.
This should allow you to boot using @sc{lilo} with the option
@samp{linux.old} if you have any difficulty booting with the new kernel.

Note that the commands for the @samp{zlilo} target have been altered
slightly in the MCC Makefile to conform to the conventions of this
distribution: the variable @samp{VMLINUZ} has been added, and the copying
of @code{zSystem.map} removed.
You may wish to make similar changes to the Makefile which comes with
later versions of the Linux kernel:

@example
VMLINUZ = /boot/vmlinuz
zlilo: $(CONFIGURE) zImage
     if [ -f $(VMLINUZ) ]; then mv $(VMLINUZ) $(VMLINUZ).old; fi
     cat zImage > $(VMLINUZ)
     /usr/bin/rdev -R /boot/vmlinuz 1
     /usr/sbin/psupdate
     if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
@end example

@strong{Note}: This release
installs the include files in @code{/usr/include/asm} and
@code{/usr/include/linux} in the directory @code{/usr/include} rather than
in @code{/usr/src/linux(-mcc)}.
@fiindex @code{usr/include/asm}
@fiindex @code{include/asm}
@fiindex @code{usr/include/linux}
@fiindex @code{include/linux}
This is actually more convenient if you are not recompiling the kernel
repeatedly.  It means that the C compiler works without installing the
kernel sources, and continues to work after you delete the kernel
sources.  Nevertheless, if you are doing a lot of work with different
kernels, you may find it more convenient to move these two directories
and their contents to @code{/usr/src/linux/include}, and put symbolic links
to them in the @code{/usr/include} directory:
@page

@example
mkdir -p -m 755 /usr/src/linux/include
(cd /usr/include;tar cf - asm linux)|(cd /usr/src/linux/include; \
 tar xvfp -)
rm -rf /usr/include/asm /usr/include/linux
ln -s /usr/src/linux/include/* /usr/include
@end example

Note that this is not necessary; the kernel source installed from
the @i{linux} package should compile without changing anything.

@node Ethernet cards, Tcpip, Kernel, Adapting
@section Setting up Ethernet cards

The `standard' kernel as distributed by Linus Torvalds currently contains
support for a limited number of Ethernet cards.
@cindex Ethernet cards
@cindex @code{WD8003}
@cindex @code{WD8013}
@pindex EZSETUP
@pindex wdsetup
@xref{Linux, , What is Linux?}.
Western Digital cards should be installed with the two jumpers set to
@samp{soft}.
It is a good idea to have the DOS program @samp{EZSETUP} to hand, so that
you can use it to configure the card in case @samp{wdsetup} doesn't work.
(The @samp{EZSETUP} command is supplied with most Western Digital cards
on a DOS floppy.  If you don't have such a floppy, ask the dealer
from whom you bought the card.)
The manual page for @samp{wdsetup} is installed
as part of the @i{tcpip} package, and contains more information about
this program.

Login as root, then @samp{cd /etc}.  You should configure the card
before starting the networking software; otherwise you must
(after issuing @samp{shutdown -h}, of course)
press the @samp{RESET} button or switch the power off and on
before the changes take effect.  Give the command

@example
./wdsetup -a 280 -i 5
@end example

to set the card's address and IRQ to appropriate values.
The current kernel source sets the IRQ for some tape devices to 5,
which conflicts with the most usual Ethernet card IRQ.
Either change the kernel source, or change the Ethernet card's IRQ to
another value, e.g., 10.
If this doesn't work, you need to read the file @code{README.wdsetup}
for more information.

Besides changing the cards themselves, the new net-2 software allows
you to configure the drivers in the kernel to work with your card.
@cindex @code{3c503}
@cindex @code{HP-LAN}
@cindex @code{NE2000}
@cindex @code{DE-600}
@pindex ifsetup
@pindex iflink
You need to do this only if the kernel fails to recognise your Ethernet
card at boot time, and writes the message @samp{No ethernet device found} on
your screen and in the file @code{/var/adm/messages}.
In this case, after running @samp{install.net}, read the manpages
for the commands @samp{ifsetup} and @samp{iflink}.
As I understand it, you will need to use @samp{ifsetup} to reconfigure
the driver, and then user @samp{iflink} to link the driver to
@code{/dev/inet}.  Unfortunately, the net-2 @sc{faq} file contains
no information about these commands, and I do not find the man pages
clear.  Once you determine the correct form of these commands for your
machine, edit @code{/etc/rc.net} and insert them where the note about
@samp{ifsetup} appears.

@node Tcpip, Configuration, Ethernet cards, Adapting
@section Configuring the @i{tcpip} package

The TCP/IP programs included in this release of MCC Interim Linux will
not work unless you use a version of the kernel which includes TCP/IP
and, if you wish, @sc{nfs}.
@cindex configuring TCP/IP
@iftex
@dosubind{cp}{TCP/IP}{configuring}@relax
@end iftex
All kernels distributed in this MCC release include
both TCP/IP and @sc{nfs}.  This software should work even if you have no
Ethernet card.  In that case, of course, you cannot contact other machines,
unless you use @sc{slip} or @sc{plip}.
This MCC release does not contain the @samp{dip} software usually used
to start @sc{slip} connections.
More information about @sc{slip} appears in the Linux networking HOWTO.
@xref{HOWTO, , The Linux HOWTO documents}.

The kernel source supplied, like the compiled kernels, contains
only the Ethernet drivers contained in Linus Torvald's official release
of the kernel.
If you want support for one of the other Ethernet cards, you must get
patches from somewhere else and install them before recompiling the kernel.
A recent version of many such patches is available by anonymous ftp from
@t{ftp.mcc.ac.uk} in the directory @code{/pub/linux/newether}.

Before you configure the @i{tcpip} package, you should know your
hostname, domain name, IP address, netmask, gateway address, and
the address of a Domain Name Server.  In particular, you may need to
have your network manager assign you an IP address.  If you have no
Domain Name Server, or no gateway, you may use the loopback address
@code{127.0.0.1} for these values.

After installing the @i{tcpip} package, give the command @samp{install.net}.
@pindex install.net
(This is done during installation if you answer @samp{y} to the question
about configuring networking software.)
The following dialogue ensues:

@example
# install.net
What is your hostname (default = linux): @emph{avl0}
Internet address of avl0 (default = 127.0.0.1): @emph{130.88.201.62}
Domain name for avl0 (default = (none)): @emph{mcc.ac.uk}
Netmask for avl0 (default = 255.255.255.0): _
Gateway address (default = 130.88.201.250): _
IP address of your domain name server (default = 130.88.13.7): _
Hostname:         avl0
Domain name:      mcc.ac.uk
Fully qualified:  avl0.mcc.ac.uk
Internet address: 130.88.201.62
Netmask:          255.255.255.0
Network address:  130.88.201.0
Gateway address:  130.88.201.250
DNS server:       130.88.13.7

Is this correct (Y or N): @emph{y}
HOSTNAME: "avl0"
You may add more nameservers by editing /etc/resolv.conf
Networking software is now configured.
@end example

Here instead of @samp{avl0} your hostname should appear, and you must
give your own addresses instead of @samp{130.88.@i{x}.@i{x}}, and your own
domain instead of @samp{mcc.ac.uk}.  Before you try to run any TCP/IP
software, you might need to run @samp{wdsetup} or @samp{ifsetup}.
@xref{Ethernet cards, , Setting up Ethernet cards}.
Note that the @samp{install.net} script is aware of the peculiar
gateways and netmasks used in Manchester, and makes what ought to be
sensible guesses at default values for other sites.

After installing networking software,
 you should edit the file @code{/etc/inetd.conf} to
comment out any services you wish not to allow.
@fiindex @code{etc/inetd.conf}
@fiindex @code{inetd.conf}
To remove a service, insert an initial @samp{#}.  If @samp{inetd} is already
running, you must send it @sc{sighup} or reboot after changing this file;
otherwise the changes have no effect.  Some services,
particularly @code{tftp}, may expose your machine to crackers if you have a
network connection.  Read the man pages and be cautious!

If you have no local domain name server, you may wish to delete the
file @code{/etc/resolv.conf} and to remove @samp{bind} from the file
@code{/etc/host.conf}.
@fiindex @code{etc/resolv.conf}
@fiindex @code{resolv.conf}
@fiindex @code{etc/host.conf}
@fiindex @code{host.conf}

Other networking programs are available from the various Linux
ftp sites.  They should compile and fit into the MCC installation
with little difficulty.  Note that MCC does not use shadow passwords,
so any programs which have the option of shadow password support
must be compiled without it.

@strong{Note}: These programs are compiled from the most recent source I
could find.  I have fixed a few bugs, but there may still be more.
The source I actually compiled can be found (with no patches needed) in
the file @code{netsrc25m} in the directory @code{sources} in the
current MCC Interim distribution.

@node Configuration, Parameters, Tcpip, Adapting
@section Editing the system configuration files

After installing this version of MCC Interim Linux, you may wish to
customise it.
@cindex system configuration files
@cindex configuration files
The following files should probably be edited:

@table @code
@item /etc/rc.local
@fiindex @code{etc/rc.local}
@fiindex @code{rc.local}
This is intended to contain local commands which you want to be
run at boot time.
@pindex selection
@cindex selection
@cindex mouse
@fiindex @code{dev/mouse}
@fiindex @code{mouse}
The distributed file contains the @samp{selection} command (commented
out).  This command will not work unless you have an appropriate
@code{/dev/mouse} device.  For a serial mouse, this is usually the
same as @code{cua0} or @code{cua1}.  For a bus mouse,
this is usually the same as one of the devices @code{logibm},
@code{psaux}, @code{inportbm}, @code{atibm}.  Link the appropriate
device to @code{/dev/mouse}, for example with the command
@samp{ln /dev/cua0 /dev/mouse}.  Note that no MCC kernel comes
with support for bus mice already compiled, and that some bus mice
will cause problems if @samp{selection} is running at the same time
as the X windowing software.

@item /etc/mtools
@xref{Mtools, , Special commands for DOS floppies and partitions}.

@item /etc/passwd
If you wish to add a new user, edit this file.  The format is

@example
pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
@end example
@fiindex @code{usr/include/pwd.h}
@fiindex @code{pwd.h}
@cindex new users
@cindex adding users
@cindex users, adding

where the fields have the meanings defined in the file
@code{/usr/include/pwd.h}: user name, encrypted password, user ID number,
group ID number, real name, login directory, login shell.

@item /etc/lilo.conf
This contains the command which controls what happens whenever @sc{lilo} is
reinstalled.
@fiindex @code{etc/lilo.conf}
@fiindex @code{lilo.conf}
You must give the command @samp{lilo} whenever the system file
(@code{/boot/vmlinuz} by default) is modified (for example, by the @samp{rdev}
command)
or moved: @sc{lilo} does not use the directory structure to find the file.
The file @code{/etc/README.lilo} contains information about the contents
of the file @code{/etc/lilo.conf}.

@item /etc/disktab
If you have one of the @sc{scsi} disks for which Linux cannot get the
geometry, you must edit this file before installing @sc{lilo};
otherwise the installation will fail.
@fiindex @code{etc/disktab}
@fiindex @code{disktab}

@item /etc/inetd.conf
Some services for inetd are commented out.
@xref{Tcpip, , Configuring the @i{tcpip} package}.

@item /etc/kbmap
This file contains the key definitions for your keyboard.
@fiindex @code{etc/kbmap}
@fiindex @code{kbmap}
@cindex keyboard maps
@cindex maps, keyboard
@pindex kbdinstall
By default the British (UK) keyboard map is installed.
Other available keymaps are installed in part two of the @i{base} package,
and the MCC installation gives you the opportunity to change your default.
The command @samp{kbdinstall} allows the root user to change the
system default keyboard map.

Some users with special requirements have asked whether the Shift, Control,
and Alt keys can be changed to toggles.
To do this, simply edit the file @samp{/etc/kbmap}, changing the
keysyms @samp{Shift}, @samp{Control}, and @samp{Alt} to @samp{Shift_Lock},
@samp{Control_Lock}, and @samp{Alt_Lock} respectively.  If you do this,
it is a good idea to set some key (for example, Caps_Lock or a function key)
to Alt, to avoid problems which occur when switching between virtual
consoles.
@end table

@node Parameters, XFree86, Configuration, Adapting
@section Passing parameters to the kernel

It is possible to pass parameters to the kernel in two ways:
by specifying them at the LILO prompt, or by an option in the
file @samp{/etc/lilo.conf} such as @samp{append = "hd=202,64,32"}.
@cindex kernel parameters
These options may be useful if your kernel does not detect your
hardware configuration completely, or in other circumstances.
Unfortunately they are not widely or clearly documented.

Among the parameters accepted by MCC kernels are these:

@table @t
@item aha152x=portbase,irq,scsiid,reconnect
Four integers required for Adaptec AHA-152x driver.

@item bmouse=mouse_irq
One number describing a bus mouse.

@item debug
Set the console log level to 10.

@item ether=irq,base_addr,mem_start,mem_end,name
One to four numbers and a device name for Ethercard drivers.
All arguments are optional, with @i{name} being the first non-numeric
argument.
@table @i
@item irq
@code{0} means to use autmatic detection.
@item base_addr
@code{0} means to probe.
@item mem_start
Some drivers use this to specify the debug level:
@code{0}--@code{7}, with 0 meaning no messages, and 7 the maximum.
@item mem_end
The 3c502 driver uses this to select between internal and
external transceivers: @code{0} for internal (the default), @code{1}
for external.
The @i{name} argument should be, for bus-attached Ethernet cards,
one of the following: @code{eth0}, @code{eth1}, @code{eth2}, @code{eth3}.
The following names are accepted for parallel port adaptors:
@code{atp0}, @code{dl0}.
@end table

@item hd=cyl,head,sector
Three numbers describing geometry of the (first) hard disk.

@item mcd=port
@itemx mcd=port,irq
One or two numbers describing Mitsumi @sc{cd rom}.

@item ncr5380=port,irq,dma
Three numbers required for NCR 5380 driver.  Because of a bug, it
appears that only the first two may be specified.

@item no387
There is no maths coprocessor on this machine.

@item pas16=io_port,irq
Two numbers required for Pro Audio Spectrum/Studio 16 driver.
The kernel doesn't actually allow this to be specified at the moment.

@item ramdisk=@i{nnn}
Reserve @i{nnn} Kb of memory for a ramdisk.
@fiindex @code{main.c}
@fiindex @code{linux/init/main.c}
@fiindex @code{usr/src/linux/init/main.c}
The MCC kernels have the following patch applied to
@code{linux/init/main.c} to enable this option:

@example
@@@@ -298,4 +298,6 @@@@
            @} else if (!strcmp(line,"ro"))
                    root_mountflags |= MS_RDONLY;
+             else if (!strncmp(line,"ramdisk=",8))
+                   ramdisk_size = simple_strtoul(line+8,NULL,0);
              else if (!strcmp(line,"rw"))
                    root_mountflags |= ~MS_RDONLY;
@end example

@item reserve=start,extent@{,start,extent@}
One or more pairs of numbers specifying the base address of a reserved
region of memory and the size of that region.
This prevents other drivers from probing the region unless
another kernel argument explicitly tells them to do so.
For example, @samp{reserve=0x300,32, ether=0,0x300,eth0} keeps all
device drivers except the Ethernet card drivers from probing
@code{0x300}--@code{0x31f}.

@item ro
The root file system is to be mounted in read-only mode.

@item root=@i{nnn}
@itemx root=/dev/@i{xxx}
Specify the hex number or device name for the root file system partition.

@item rw
The root file system is to be mounted in read-write mode.

@item sbpcd=ioaddr,type
One number and a string for the IDE-style Soundblaster/Panasonic
@sc{cd rom} driver.  The @i{ioaddr} might be, for example, @code{0x230}.
The string is case sensitive, and may be either @samp{LaserMate} (the
default) or @samp{SoundBlaster}.

@item sound=@i{integers}
It is not clear to me from @code{drivers/sound/dev_table.c} exactly how
many integers are passed, or what they mean.

@item st0x=base_address,irq
Two numbers required for Seagate ST01/ST02 @sc{scsi} driver.

@item t128=address,irq
Two numbers required for Trantor T128/T128F/T228 driver.

@item tmc8xx=base_address,irq
Two numbers required for Future Domain TMC-885/TMC-950 @sc{scsi} driver.

@item xd=type,irq,iobase,dma
Four numbers required for XT hard disk controller (@code{/dev/xda}).
@end table

@node XFree86, , Parameters, Adapting
@section Installing the XFree86 software

This release of Linux is compatible with XFree86 release 2.1.
The software is available from ftp sites; for example, from
@t{ftp.mcc.ac.uk} in the directory @code{/pub/linux/packages/X11/XFree86-2.1}.
This directory contains two files, @code{INSTALL} and @code{README.Linux},
which you should read with care.

Select the files you need: one of the seven server files, together with
the six other required files, form a minimum installation, as described
in @code{README.Linux}.  The required files are small enough to fit on
floppy disks.  Place these files in a directory somewhere on your
Linux machine, e.g., in @code{/tmp}.  Then give the following commands:

@example
cd /usr/X386
for i in /tmp/XF86-2.1-*.tar.gz;do tar xzfp $i;done
@end example

@strong{Note}: Be sure to include the @samp{p} modifier on the @samp{tar}
command, or some of the binaries will not work properly.

After the software is installed, you must give the command @samp{ldconfig},
so that programs can access the new shared libraries.
Only then should you tackle the job of creating an @code{Xconfig} file
for your machine.

Producing a suitable @code{Xconfig} file tricky, since it is dependent
on both your graphics chip and your monitor specifications.
@fiindex @code{usr/X386/lib/X11/Xconfig}
@fiindex @code{Xconfig}
@fiindex @code{usr/lib/X11/etc/README.Config}
@fiindex @code{README.Config}
The instructions in the file @code{/usr/lib/X11/etc/README.Config}
should be followed @emph{very carefully}, since you can damage your
monitor if you specify values which are very far from the correct ones
for your hardware.  Calculating the correct values for the @code{Xconfig}
file is the most difficult aspect of installing X windowing software.

Once the XFree86 software is installed and configured, you will probably
want to fine-tune the installation.  If you are using the SVGA server,
the command @samp{vgaset} may be useful for this purpose.
@pindex vgaset
It is not part of the standard X distribution, but the source is
available from most ftp sites.  A binary for this command can be found
at @t{ftp.mcc.ac.uk} in @code{/pub/linux/binaries-4.5.21/usr/sbin}.

The current version of XFree86 sets up the same keyboard mapping which
is current when X is started, so that it is no longer necessary to
have a special @code{Xmodmap} file if you do not have a US keyboard.

When X is properly configured and fine-tuned, you may wish to change
your Linux installation so that it starts X when the system boots
and uses @samp{xdm} to log in from the console.
@pindex xdm
To do this, edit
the file @code{/etc/inittab} and change the @samp{initdefault} line
to read

@example
id:5:initdefault:
@end example

The files for configuring @samp{xdm} are contained in the
@code{/usr/lib/X11/xdm} directory.
@fiindex @code{usr/lib/X11/xdm/Xsetup_0}
@fiindex @code{Xsetup_0}
@fiindex @code{usr/lib/X11/xdm/adm-config}
@fiindex @code{adm-config}
You may wish to edit @code{Xsetup_0} to remove the console from the
@samp{xdm} login screen, or to change the default paths in
@code{xdm-config} to conform more closely to the new file system
standard.  Among the entries which may be useful are these:

@example
DisplayManager.errorLogFile:	/var/adm/xdm-errors
DisplayManager.pidFile:		/var/X11/xdm-pid
DisplayManager.authDir:		/var/X11
DisplayManager.*.userPath:	/usr/local/bin:/usr/bin:/usr/bin/X11:/bin:.
@end example

You may also find it useful to set @samp{DisplayManager.*.systemPath},
the default @code{PATH} variable for root, to include @code{/sbin:/usr/sbin}.
Some examples of files configuring @code{xdm} can be found at
@t{ftp.mcc.ac.uk} in the
@code{/pub/linux/binaries-4.5.21/usr/X386/lib/X11/xdm} directory.

@node Using, Documentation, Adapting, Top
@chapter Using Linux

@menu
* Caring::      Caring for your Linux system.
* Fdisk::       The Linux partition table editor.
* DOS::         The msdos file system.
* Mtools::      Special commands for DOS floppies and partitions.
* Commands::    Commands peculiar to Linux.
* Recovering::  Recovering from fatal disasters.
@end menu

@node Caring, Fdisk, , Using
@section Caring for your Linux system

Linux is an operating system which must be handled more carefully
than DOS, or at least more carefully than older versions of DOS.
There are some important facts about Linux which will help you to
have fewer problems and get more out of your system.

Linux has several file systems, but all of the `native' Linux file
systems have one feature in common: they require special care which
a DOS file system does not.
@cindex shutting Linux down
First, information is not written to disk as soon as it becomes available,
but it is flushed at regular intervals (every 30 seconds by default).
This improves performance.  But you must @strong{never} switch off
a PC which is running Linux, since some data
may not get written to disk, and will be lost, and the data describing
the file system may become inconsistent, putting the files in the
system at risk of corruption.

To shut Linux down safely, there are two methods you might use:

@enumerate
@item Reboot the system either by pressing @samp{CTRL-ALT-DEL}, or
by giving the command @samp{shutdown -r @i{time}}.

@item Stop the system by giving the command
@samp{shutdown -h @i{time}}.
@end enumerate

The @samp{shutdown} command can only be given by the user `root'.
@pindex shutdown
The format of the @i{time} argument is discussed in the manual
page for @samp{shutdown}; @samp{now} is a common example.

Floppy disks may be corrupted if you remove
them from the drive before unmounting them, since they too might
not be up-to-date at the time.
@pindex fsck
Should this happen, you can repair them with the command @samp{fsck},
unless they contain an @i{msdos} file system.
MCC Interim distributions are configured to run @samp{fsck} on all
mounted file systems at boot time.
Since both @i{minix} and @i{ext2} file systems now have `clean flags'
set when they are cleanly unmounted, the @samp{shutdown} command should
not ordinarily be given the @samp{-f} option.

There are a few files, system logs and such, which grow without limit.
@fiindex @code{var/adm}
@fiindex @code{adm}
@fiindex @code{var/adm/messages}
@fiindex @code{messages}
@fiindex @code{var/adm/wtmp}
@fiindex @code{wtmp}
The logs in @code{/var/adm}, particularly the file @code{messages},
are restarted whenever the system is booted, so they should not
cause problems unless you leave the system running for long periods,
or when the file system is nearly full.  But the file @code{/var/adm/wtmp}
will grow constantly, and you may need to shorten it.  To do this,
log in as root and give the command

@example
> /var/adm/wtmp
@end example

If you install networking software and connect your machine to the
outside world, you may be exposing yourself to unscrupulous hackers.
@cindex hackers
@pindex passwd
Be careful to set passwords, particularly for the root user, using
the command @samp{passwd}.

The superuser @samp{root} has very great powers, and can easily
damage or delete the entire system.
@cindex root user
@cindex superuser
@pindex chmod
It is a good idea to do most of your work as `user' (or as some
other user name), and to become root only when you need to run
one of the commands which only root can give.  For example, you can
make a file read-only by using the @samp{chmod} command, so that
a simple @samp{rm} command will not delete it, but @samp{rm} does
not normally ask the root user for confirmation before deleting
such a file.

To learn more about Unix systems, get a good book, read it, and
follow some of the advice it gives.
Some recommendations can be found in @i{Linux
Installation and Getting Started}; for further information, see
@ref{Other, , Other information about Linux}.

@node Fdisk, DOS, Caring, Using
@section @code{fdisk}: the Linux partition table editor

@code{fdisk} is the Linux partition table editor.
@ifinfo
@pindex fdisk
@cindex partitions
@end ifinfo
@iftex
@dosubind{pg}{@code{fdisk}}{description}@relax
@dosubind{cp}{partitions}{editing with fdisk}@relax
@end iftex
In this section we examine this utility and try to describe it
thoroughly enough so that anyone can use it.

@menu
* Disks::           Disks and how they are described.
* Dividing::        Dividing up your disk.
* Fdisk command::   The @code{fdisk} command.
* Deleting::        Deleting and adding partitions.
* Flags::           Active flags and system types.
* Extra::           Extra commands for experts.
* Warnings::        Warnings for @code{fdisk} users.
@end menu

@node Disks, Dividing, , Fdisk
@subsection Disks and how they are described

A typical disk consists physically of one or more circular objects
called @dfn{platters}, which rotate about a central axis.
@cindex disks
@cindex platters
@cindex heads
Devices called @dfn{heads} move to specified places on the disk surface to
read or write information.  There is usually one head on each side
of every platter, and all these heads are attached to a comb-like
controller arm which moves all of them at the same time, either
closer to the centre of the disk, or closer to the outer edge.

Suppose the arm is in one position, putting an area of the disk
surface within reach of one or another of the heads.
@cindex cylinders
@cindex tracks
This total area, everything that is accessible without moving the arm, is
called a @dfn{cylinder}.  (A cylinder is a barrel-shaped cross section
of a disk, consisting of a circular strip from each side of each
platter.)  The part of a cylinder that one
head can read or write without moving is called a @dfn{track}.

Each track is divided into several pie-shaped slices called
@dfn{sectors}, which are the smallest parts of the disk which can
be read or written at a time.
@cindex sectors
The sectors on one disk are usually all the same size.

In fact, there are not always two heads to
every platter, there are some disks which do not have the same
amount of data in every cylinder, and there may be disks which
do not have the same amount of data in every sector.  These features
are usually hidden on PCs by the controller card or the @sc{bios},
which map the physical geometry of a disk onto a logical geometry,
which is what is actually used to access the disk.

The numbers which describe the @dfn{geometry} of a disk are
@cindex geometry of a disk

@enumerate
@item The number of cylinders it contains.
@item The number of tracks per cylinder, which is the number of heads.
@item The number of sectors per track.
@item The number of bytes per sector.
@end enumerate

These numbers vary from disk to disk, but a typical PC disk might have
about 1000 cylinders, half a dozen heads, and 15 or 20 sectors
per track, with each sector containing 512 bytes or characters;
such a disk contains 40 to 60 megabytes of data.
@cindex double density floppy
@cindex high density floppy
@cindex density
A @dfn{double density}
floppy disk contains 40 cylinders, with 2 heads (2 tracks per cylinder),
and with 9 sectors per track; such a disk contains 360 kilobytes, or
360 * 1024 characters.  A @dfn{high density} 3.5 inch floppy contains
80 cylinders, with 2 heads and 18 sectors per track, or 1.44 megabytes,
or 1440 * 1024 characters.

The exact size of a track or cylinder in bytes varies from one disk
to another.  This @code{fdisk} for Linux deals mainly with cylinders, since
this is the best unit to use when allocating space for partitions.
@cindex block size
It reports partition sizes in @dfn{blocks} of 1024 bytes, or 2 sectors,
since @samp{mkswap} and the various @samp{mkfs} programs require this number.
A block is the smallest amount of space which can be set aside for
a file in the current file systems.

An operating system, such as Linux or DOS or OS/2, may use a disk
in any way that it wishes, but if two operating systems share the
same disk, they must agree on who owns what, or else one will
interfere with the other (that is, by damaging the other's files).
@cindex partitions
@cindex partition tables
A @dfn{partition} is a section of a hard disk which is handled as a unit
by all operating systems which can access the disk.  The standard way
to define partitions (for the moment) is the @dfn{partition table},
a list of information which is stored in parts of the disk that don't
belong to any of the systems using the disk.  The beginning of the
partition table is stored in the disk's primary boot sector, and the
rest is stored in a chain of sectors scattered throughout the disk.

The first sector on the disk is called the @dfn{primary boot block} or
@dfn{primary boot sector} because:
@cindex primary boot block
@cindex boot sector
@cindex primary partitions

@enumerate
@item It comes first, before other, similar sectors.

@item It tells where the other, similar sectors are
found, so that it is logically `prior' to them.

@item It usually
contains code which is executed when the system boots up.
@end enumerate

The primary boot sector
sector contains a table describing at most four partitions.  These
areas are called @dfn{primary partitions}.

The partition table in the primary boot sector may also describe
at most one @dfn{extended partition}.
@cindex extended partitions
@cindex logical partitions
This is a large area of the disk,
usually containing all the space which is not in any primary partition.
Within this space we can set aside other areas which are called
@dfn{logical partitions}, because they look almost exactly like
primary partitions.  In fact, the main difference between them is
that we can boot from primary partitions, while we cannot boot from
logical partitions.  This happens because the address of a primary
partition is in a fixed place, whereas the address of a secondary
partition is not, so we require a more complicated process to
discover it, one which is too difficult for most primary boot programs.
(Note that @sc{lilo} and other boot loaders can boot logical partitions,
but only if the initial boot code is stored in the Master Boot Record,
in one of the primary partitions, or on another disk.)

@node Dividing, Fdisk command, Disks, Fdisk
@subsection Dividing up your disk

It is a good idea to plan ahead before you start creating partitions
on your disk.
@cindex changing size of partitions
@cindex resizing DOS partitions
If you set aside a partition for some purpose, it is
not easy to change its size: you must back up all the data from
the partition, whether to floppies, to another partition, to another
hard disk, or somewhere else; then you must edit the table which
describes this partition, so changing its size; then you must reboot
and initialise the new partition, formatting it, for example,
under DOS, or running @samp{mkfs} under Linux; finally you can copy
all the data back.  It is possible, if you have several partitions,
to copy data back and forth between them while you change their sizes,
but this is a bit risky and time consuming.  It is better to plan ahead
what you will need, since it is hard to change it afterwards.

Many people with large disks and recent versions of DOS have their
entire file system on one large partition.  They usually ask, `Isn't
there any way I can reformat my disk without copying everything off?'
There is no way to do it using standard DOS utilities, and there is
no truly safe way to do it using commercial software, because, if you
make a mistake, you will lose the entire contents of your disk.
If you are going to back up your disk anyway, you might as well
copy the data back safely.  The Linux @sc{faq} file contains references
to tools and procedures which will allow you to do this, if you dare.

DOS and Linux both allow you to access several partitions on a
single disk; on DOS these are treated as if they were separate
disks or drives, and under Linux they are treated as different
@dfn{devices}.

You can have up to 64 partitions on a single @sc{ide} disk, or up to
16 partitions on a single @sc{scsi} disk, at least as far as Linux
is concerned; in practice you will rarely want so many.
@cindex maximum number of partitions
The maximum size of a Linux file system on a single
partition depends on the type of file system you use.  @i{Minix} file
systems are limited to 64 megabytes.  You may have all of your Linux
files in a single partition, or you may have two, three, or more Linux
file systems.  Similarly you may have one or more DOS partitions.
If you have several small
partitions, you run much less risk of losing all your files if your
disk gets corrupted.  On the other hand, you may run out of space on
a small partition more easily.

Under DOS, you must refer to each partition by a separate drive
letter, but all partitions are automatically accessible.  Under Linux
only the root partition is automatically accessible, but once we mount
another partition, it is indistinguishable from the rest of the file
system.
@fiindex @code{etc/rc}
@fiindex @code{rc}
Disks are usually mounted by a command in one of the system
startup files, @code{/etc/rc}, so you need not worry about having to do
it yourself whenever you boot the system.
But even ordinary users may
be allowed to mount removable hard disks and floppy disks.

Linux requires at least one partition, which is the `root' of the
file system.  You may prefer to have a separate partition for @code{/usr},
which contains most of the executable files, or for @code{/home}, which
contains most of your private files.  You may also wish to set aside
a partition to use for swap space, depending on the amount of memory
your PC has.  You will certainly need swap space if you have less
than 4 Mb of @sc{ram} and wish to compile anything substantial.
You can reserve swap space in a file, but you need a partition big
enough to hold it, and this will probably be less efficient than
having a partition devoted to swap.

The disk space you need for Linux is discussed in
@ref{Space, , Disk space required for Linux files}.

Are you going to boot Linux from the hard disk, or will you boot
from a floppy?  Some boot programs place severe restrictions on where
the boot partition can be.  @sc{lilo} is more relaxed about this, but does
require either the Master Boot Record on your first hard disk, or the
boot record on one of the first four partitions on your first hard disk.

If you have an extended partition with logical partitions in it, you can
have only three primary partitions containing data.

@node Fdisk command, Deleting, Dividing, Fdisk
@subsection The @code{fdisk} command

Every operating system, whether DOS, OS/2, or Linux, should provide
its own utility for editing hard disk partition tables.
@pindex fdisk
At least four
of these utilities have been called @samp{fdisk}, for `Fixed DISK setup
program', where `fixed' means `not removable'.  I believe the first PC
program named @samp{fdisk} came from Microsoft in about 1985; before that time
disks were too small to divide into separate sections.

Every operating system has its own peculiarities.  Normally you should
set up a partition for the use of one operating system by using its own
@samp{fdisk} program.  Do not use the Linux @samp{fdisk} to create partitions
for DOS or for any system other than Linux; otherwise you may have problems.
Do not use the DOS @samp{FDISK} to create Linux partitions.

An @samp{fdisk} program performs two functions: it reports how the disk is
configured, and it changes that configuration by adding or deleting
partitions.  Most @samp{fdisk} programs can also change other information in
partition tables.

This @samp{fdisk} for Linux operates on one hard disk at a time.  If you give
the command

@example
fdisk
@end example

it reports on, and is able to change, @code{/dev/hda}, the first hard disk.
(If you have no @code{/dev/hda}, @samp{fdisk} uses @code{/dev/sda} as the
default device.)
To look at or change the second hard disk, @code{/dev/hdb}, give the command

@example
fdisk /dev/hdb
@end example

To look at or change the first @sc{scsi} disk, give the command

@example
fdisk /dev/sda
@end example

There are some special forms of the @samp{fdisk} command.  One
of them, suggested by Jim Winstead, simply lists all partitions on
all available disks:

@example
fdisk -l     (where `l' is a letter, not the digit `1')
@end example

The option @samp{-v} is provided to list the current version of the
@samp{fdisk} command.  Finally, there is an option @samp{-s} which
is not really intended for interactive use.  It causes fdisk to
print the size of a partition in blocks of 1024 bytes as follows:

@example
fdisk -s /dev/hda7
39934
@end example

Because this is intended to be used by @samp{mkfs} and @samp{mkswap}
programs, it does not return the size of extended partitions or of
partitions whose system type code is less than 10 (hexadecimal a).
If you start @samp{fdisk} without using one of these special options,
it responds by asking for a command:

@example
Command (m for help): _
@end example

Each @samp{fdisk} command consists of a single letter, which must be followed
by @t{<RETURN>} before it is obeyed.  Upper and lower case are not
distinguished.  Anything you type after the first character is ignored.
Give the command @samp{m}, and you should see this menu:@*

@cartouche
@example
 Command action
    a   toggle a bootable flag
    d   delete a partition
    l   list known partition types
    m   print this menu
    n   add a new partition
    p   print the partition table
    q   quit without saving changes
    t   change a partition's system id
    u   change display/entry units
    v   verify the partition table
    w   write table to disk and exit
    x   extra functionality (experts only)

 Command (m for help): _
@end example
@end cartouche

The simplest commands are Print, Verify, and Quit.  On a small disk, the
Print command might produce a display like this one:

@example
Disk /dev/hda: 5 heads, 17 sectors, 977 cylinders
Units = cylinders of 85 * 512 bytes

   Device Boot  Begin   Start     End  Blocks   Id  System
/dev/hda1   *       1       1     236   10021+   1  DOS 12-bit FAT
/dev/hda2         837     837     977    5992+   5  Extended
/dev/hda3   *     237     237     836   25500   83  Linux native
/dev/hda5         837     837     936    4249+  82  Linux swap
/dev/hda6         942     942     977    1522    1  DOS 12-bit FAT
@end example

There are five partitions reported; @code{/dev/hda4} does not appear because
it is not allocated.  Partitions 1 and 3 are flagged as bootable.  The size
of each partition is reported in 1 kilobyte blocks; hence the primary Linux
partition, partition 3, is 25.5 megabytes in size.  The @samp{+} after three
of the sizes warns that these partitions contain an odd number of sectors:
Linux normally allocates filespace in 1 kilobyte blocks, so the extra
sector in partition 5 is wasted.  Id numbers are reported in hexadecimal
and explained in English.

The display/entry units may be either cylinders or sectors.  The default
is cylinders, but changing the units makes the print command display
the following table for the system reported above:

@example
Disk /dev/hda: 5 heads, 17 sectors, 977 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot  Begin   Start     End  Blocks   Id  System
/dev/hda1   *       1      17   20059   10021+   1  DOS 12-bit FAT
/dev/hda2       71060   71060   83044    5992+   5  Extended
/dev/hda3   *   20060   20060   71059   25500   83  Linux native
/dev/hda5       71061   71061   79559    4249+  82  Linux swap
/dev/hda6       79985   80001   83044    1522    1  DOS 12-bit FAT
@end example

The start of data in both DOS partitions is 16 sectors after
the beginning of the partition: this is one reason why you should use
DOS's own @samp{FDISK} to create DOS partitions.  Changing the units to
sectors also affects the way in which the new partition command asks
for the beginning and end of a new partition.

@strong{Warning}: It is dangerous
to create a new partition when the display/entry units are sectors.

The Verify command is useful because

@enumerate
@item It warns you if anything is wrong.  @strong{Always} give a Verify
command before writing any changes to disk.

@item It reports how many unallocated sectors there are on the disk.
@end enumerate

The Quit command is also useful.  @samp{fdisk} does not actually change any
data on your disk unless you give a Write command.  If you are unhappy
about any changes you may have made, give the Quit command, and your
disk will remain as it was before you ran @samp{fdisk}.  You can also
interrupt @samp{fdisk} with @samp{CTRL-C}.

@node Deleting, Flags, Fdisk command, Fdisk
@subsection Deleting and adding partitions

Deleting a partition is simple.  Give the Delete command by typing @samp{d}.
@samp{fdisk} asks:

@example
Partition number (1-6): _
@end example

Once you get this far, you must either delete a partition or interrupt the
program with @samp{CTRL-C} (or whatever your current interrupt character is).
Note:

@enumerate
@item  You may delete a nonexistent partition.  You will get a warning
message.
@item  You may delete an extended partition.  This has the side effect
of deleting all partitions greater than or equal to 5.
If you delete partition 2 in the above example, this deletes partitions
5 and 6 as well.
@item  You may delete a logical partition.  In that case, all partitions
above it are renumbered at once.  For example, if you delete
partition 5, then partition 6 becomes known as partition 5, and
partition 7 as partition 6.
@end enumerate

Adding a partition is just a bit more complicated.  Give the New command
by typing @samp{n}.  @samp{fdisk} allows you to

@enumerate
@item  Create a primary partition, if there is a free slot in the
primary partition table.
@item  Create an extended partition if there is a free slot in the
primary partition table, and if there is no extended partition.
@item  Create a logical partition if an extended partition exists.
@end enumerate

If more than one of these actions is possible, you will be asked to
select Primary, Extended, or Logical, depending on what is currently
permissible.  Before you create a primary or an extended partition,
you are asked what slot it is to have in the table (1--4).

You may not add a primary or an extended partition if the selected slot
in the primary partition table is already occupied: in that case you
simply return to the main menu.  You are not allowed to add a new
primary partition unless there are sectors available outside the
extended partition.  You are not allowed to add a new logical partition
unless there are sectors available inside the extended partition.

If space is available, you are prompted for the first cylinder:

@example
First cylinder (237-977): _
@end example

The limits are the lowest and the highest cylinders in which sectors
are available in the appropriate part of the disk.  Not all numbers in
this range are necessarily available: they may fall inside an existing
partition.  If you select a cylinder which is already in use, you are
told so and prompted again for the first cylinder.  After selecting the
first cylinder, you are prompted again:

@example
Last cylinder or +size or +sizeM or +sizeK (237-836): _
@end example

The limits are the cylinder you have chosen as the first cylinder, and the
highest cylinder which contains a legitimate upper boundary for the new
partition.  In other words, all numbers in the given range are legitimate,
unlike those in the first range of cylinders.  You may also specify the
size of a partition in megabytes, kilobytes, or in the current units
(cylinders or sectors).  A plus sign @samp{+} indicates that your answer is
a size rather than a boundary, and the suffix @samp{m} or @samp{k} (upper or
lower case) indicates that the size is not given in units of sectors or
cylinders, but in megabytes or kilobytes respectively.  Thus possible
answers to the last cylinder request above are

@table @t
@item 700
Make cylinder 700 the last cylinder in the partition.
@item +300
Make cylinder 537 the last cylinder in the partition.
@item +15m
Make the partition at least 15 megabytes in size.
@item +12500k
Make the partition at least 12,500 kilobytes in size.
@end table

If you specify a size which is too large or an end which is out of
range, the prompt is simply repeated.

Adding or deleting partitions has no effect unless you subsequently
give the Write command.  Please remember to give the Verify command
first, just before giving the Write command: this is a safety
precaution.  After giving the Write command, you will see this
message:

@example
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
@end example

If there are no further messages, the kernel has successfully copied
the information from the partition table into its own internal table.
But sometimes you will see a message like this one:

@example
Re-read table failed with error 16: Device or resource busy.
Reboot your system to ensure the partition table is updated.
@end example

In this case, depending on what you have changed in the partition
table, it may be dangerous to continue working without rebooting,
since you may lose or corrupt your data.

Here are some important things to note:

@enumerate
@item  Before you reboot, you @emph{may} run @samp{fdisk} again, either to
manage another disk, or to make additional changes to the same disk, or just
to check that the changes have been made as you expected.
This is true even after you receive the message warning you to reboot.

@item  It is not a good idea to run any of the programs @samp{mkfs},
@samp{mkswap}, @samp{mount}, or @samp{swapon}
if you have received the warning message but
have not rebooted.  In this case it is dangerous to run any program,
but these in particular may cause serious damage to the data on your
disk, including the partition tables themselves.
@end enumerate

@node Flags, Extra, Deleting, Fdisk
@subsection Active flags and system types

The active flag is a bit in the partition table entry which marks a
partition as bootable.
@cindex active flag
@cindex bootable partitions
This is important to some primary boot sector
programs, which will not boot from an unflagged partition.  Other such
programs do not allow more than one partition to be flagged.  Some,
like @sc{lilo}, ignore the flags completely.  I prefer to flag all bootable
partitions as active so that they stand out on the menu which @samp{fdisk}
lists.  @samp{fdisk} prints a star after the name of a partition's device
file if its active flag is set.

The Active command changes, or toggles, a partition's active flag.
Give the Active command, and select a partition by number.
If it is inactive, it will be flagged as active; if it is active,
it will be flagged as inactive.  You may set the active flag on an
extended or logical partition, though the meaning of such a flag is by no
means clear.  This can be used to install @sc{lilo} as a secondary boot
loader to boot a Linux which lives on a second hard disk.

The Type command changes the ID number which describes what type
a partition is.  @samp{fdisk} currently recognises 30 system IDs, in the
sense that it prints a string for each of them, but it allows you
to change any system ID to any other, with the following exceptions:
you may not change any partition to or from the type Extended, and
you may not change a partition whose type is Empty (0) to any other
type.  You may, however, change the type of any data partition to
0, which is equivalent to deleting it.

The new system ID or type code is a hexadecimal number.
@cindex partition ID codes
There are two ways of listing the numbers which @samp{fdisk} recognises:
use the List command, which prints the list, or use the Type command, which,
when it prompts you for the code, says

@example
Hex code (type L to list codes): _
@end example

where the upper case @samp{L} is used for clarity.  The codes printed are:@*

@iftex
@tex
\halign{\hskip1cm\hfil\tt#&\quad#\hfil&\quad\hfil\tt#&\quad#\hfil
 &\quad\hfil\tt#&\quad#\hfil&\quad\hfil\tt#&\quad#\hfil\cr
1&DOS 12-bit FAT & 9&AIX bootable&80&Old MINIX   &c7&Syrinx\cr
2&XENIX root     & a&OPUS        &81&Linux/MINIX &db&CP/M\cr
3&XENIX usr      &40&Venix 80286 &82&Linux swap  &e1&DOS access\cr
4&DOS 16-bit $<$32M&51&Novell?   &83&Linux native&e3&DOS R/O\cr
5&Extended       &52&Microport   &93&Amoeba      &f2&DOS secondary\cr
6&DOS 16-bit $>=$32M&63&GNU HURD &94&Amoeba BBT  &ff&BBT\cr
7&OS/2 HPFS      &64&Novell      &b7&BSDI fs\cr
8&AIX            &75&PC/IX       &b8&BSDI swap\cr
}
@end tex
@end iftex

Some of these numbers are a trifle uncertain.  By default
@samp{fdisk} uses a type of 83.  It used to use 81, the type code
used by the @sc{minix} @samp{fdisk}.
It seemed prudent to change the default since (a) many Linux `minix'
file systems are no longer compatible with @sc{minix}, (b) the @i{ext2}
file system, a native Linux file system, is fairly stable, as is the
Xia file system, and (c) the number 81 causes problems with @sc{dr-dos}.
Linux does not usually care what values you use for type codes, but
other systems, in particular DOS, OS/2, and @sc{dr-dos}, may.

The value of 82 for Linux swap partitions is my own invention, and
is intended to give some recognisable distinction to the partitions
when the values are displayed in hexadecimal.

New active flags and new system type codes are not written to the
disk until you exit from @samp{fdisk} with the Write command, as described
above, in the section on deleting and adding partitions.

@node Extra, Warnings, Flags, Fdisk
@subsection Extra commands for experts

The eXtra command @samp{x} puts @samp{fdisk} into `expert' mode, in which a
slightly different set of commands is available.  The Active, Delete,
List, New, Type, Verify, and `eXpert' commands are not available in
expert mode.  The commands Write and Quit are available as in
ordinary mode, the Print command is available, but produces output
in a slightly different format, and of course the Menu command prints
the expert menu.  There are several new commands.

@enumerate
@item  The Return command brings you back to the main menu.

@item  The Extended command prints the list of table entries which
point to other tables.  Most users do not need this data.
The information is shown as it is stored.  The same
format is used for the expert Print command.

@item  The dangerous Begin command allows you to move the start of
data in a partition away from its beginning.  Other systems
create partitions with this format, and it is sometimes useful
to be able to reproduce it.

@item  The slightly dangerous Cylinders command allows you to change
the available number of cylinders.  For @sc{scsi} disk owners, note
that we require not the actual number of @dfn{physical} cylinders, but the
number of @dfn{logical} cylinders used by DOS and other operating systems.

@item  The extremely dangerous Heads and Sectors commands allow you
to change the number of heads and sectors.  It should not be
necessary to use these commands unless you have a @sc{scsi} disk
whose geometry Linux is not always able to determine.
@sc{scsi} disk owners note that we need not the @dfn{actual} number of
heads or of sectors per track, but the number believed to
exist by DOS and other operating systems, the @dfn{logical} or
@dfn{virtual} geometry.
@strong{Warning}: If you set either of these numbers to a bad value,
you may lose all data on your disk.
@end enumerate

Always, after giving any of the commands Begin, Cylinder, Heads, or
Sectors, you should Return to the main menu and give the Verify
command.

@node Warnings, , Extra, Fdisk
@subsection Warnings for @code{fdisk} users

In general, you should not use this @samp{fdisk} program to create
partitions for other operating systems, only for Linux.
Nor should you use @samp{fdisk} commands from other operating systems
to create partitions for Linux.

@sc{dr-dos} 5.0 and 6.0 are reported to have difficulties with partition
ID codes of 80 or more.
The Linux @samp{fdisk} used to set the system type of new partitions
to hexadecimal 81.
@sc{dr-dos} seems to confuse this with hexadecimal 1, a DOS code.
The values 82 for swap and 83 for file systems should not cause problems
with @sc{dr-dos}.  If they do, you may use the
@samp{fdisk} command @samp{t} to change the system code of any Linux
partitions to some number less than hexadecimal 80; I suggest 42 and 43 for
the moment.

Partitioning a hard disk may destroy data which is on that disk
if you are not careful.  Go slowly, write down a description of
what you started with, and always verify before you write.

Most operating systems and utilities expect that all partitions end
at cylinder boundaries.  This version of @samp{fdisk} does so by default,
but you can use it to create partitions which begin or end anywhere.
This does not normally affect Linux, but it is very dangerous, as
other operating systems (including DOS) may try to `correct' the partition
boundaries.

It is dangerous
to create a new partition when the display/entry units are sectors.

The Verify command warns you if anything is wrong.  @strong{Always} give a
Verify command before writing any changes to disk.

If you set the disk geometry (tracks per cylinder, or sectors
per track) to an incorrect value, you may lose all data on your disk.

@node DOS, Mtools, Fdisk, Using
@section The @i{msdos} file system

The @i{msdos} file system provides the most convenient way of accessing
DOS floppies and hard disk partitions from Linux.
@cindex msdos file system
@iftex
@dosubind{cp}{file system}{msdos}@relax
@end iftex
@pindex mount
It allows you to mount a DOS disk or partition as part of the Linux
directory tree, using the command

@example
mount -t msdos @emph{options device directory}
@end example

Here is a particular example of a @samp{mount} command:

@example
mount -t msdos -o ro,uid=100,umask=027,conv=text /dev/hda1 /mnt
@end example

There are some special options to the @samp{mount} command
which apply to the @i{msdos} file system, and which are not included
in the man page for @samp{mount}.  Among these are the following:

@table @code
@item uid=nnn
When an @i{msdos} file system is mounted, its files and directories have
no `owner' as Linux understands it, so they are given, by default,
the owner `root'.  If you wish to access these systems from another
user name, it is convenient to pretend that another user owns
everything in the mounted system.  To do this, use @samp{uid=nnn},
where @samp{nnn} is the user's ID number from @code{/etc/passwd}.

@item umask=nnn
When an @i{msdos} file system is mounted, its files have only the `write'
permission (if they are not read-only files), and its directories
have no permissions at all.  Permissions are set on the files and
directories using the mounter's @samp{umask}.  To change this, you may
set the permissions by specifying an explicit @samp{umask} on the
@samp{mount} command line.

@item conv=@emph{conversion}
DOS text files and Unix text files have different conventions for
terminating lines.  By default, @i{msdos} file systems are mounted in
such a way that no conversion is done.  This may be inconvenient
if you are editing files on a DOS partition.  The option @samp{conv=t}
or @samp{conv=text} converts all line terminators when files are
read from or written to the mounted DOS file system.  This may
lead to corruption of binary files.  A safer (but still risky) option
is @samp{conv=a} or @samp{conv=auto}, which tries to guess whether
a file is a text file or a binary from its extension.
(I counted 36 extensions in @code{linux/fs/msdos/misc.c} which are
treated as marking binary files.  All other files are treated as text.)
@end table

@node Mtools, Commands, DOS, Using
@section  Special commands for DOS floppies and partitions

@dfn{Mtools} is a public domain collection of programs to allow Unix
systems to read, write, and manipulate files on a DOS file system.
@cindex @code{mtools}
The DOS file system itself is usually a more convenient way to access
DOS file systems, but then @i{mtools} provide the ability to format and
label DOS partitions, and they can allow non-root users to access floppy
disks if you change the permissions on the @samp{/dev/fd*} files.

@iftex
The following DOS commands are emulated:@*

@catcode `#=6
@def@pitem#1{@doind{pg}{@code{#1}}@code{#1}}
@catcode`@#=@other
@tex
\halign{\hskip1cm\pitem{#}\hfil&\quad\tt#\hfil&\quad#\hfil\cr
mattrib&ATTRIB &change DOS file attribute flags\cr
mcd&CD         &change DOS directory\cr
mcopy&COPY     &copy DOS files to/from Unix\cr
mdel&DEL/ERASE &delete a DOS file\cr
mdir&DIR       &display a DOS directory\cr
mformat&FORMAT &put DOS file system on a formatted disk\cr
mlabel&LABEL   &make a DOS volume label\cr
mmd&MD/MKDIR   &make a DOS subdirectory\cr
mrd&RD/RMDIR   &remove a DOS subdirectory\cr
mread&COPY     &low level read (copy) a DOS file to Unix\cr
mren&REN/RENAME&rename an existing DOS file\cr
mtype&TYPE     &display contents of a DOS file\cr
mwrite&COPY    &low level write (copy) a Unix file to DOS\cr
}
@end tex
@end iftex

Note that the @samp{mformat} command does not do a low-level format
of the disk.  For this you must use the command @samp{fdformat}.

The above commands should not be used on mounted DOS file systems, since
the kernel may not recognise that changes have been made without using
the usual file system interface.

The pattern matching routine more closely resembles Unix than DOS.
For example, @samp{*} matches all DOS files; it is not necessary
to use @samp{*.*}.

The use of wildcards (or the '\' separator) requires the names to be
enclosed in quotes, so that the shell does not expand them.  For example,

@example
mcopy "a:*.c" .
@end example

copies all files on the A: disk with the extension @samp{.C} to the
current Unix directory.  On the other hand,

@example
mcopy *.c a:
@end example

copies all files with the extension @samp{.c} in the current Unix
directory to the A: drive.  This time you @emph{want} the shell
the expand the @samp{*.c}.

The original programs have been modified so that the
device configuration is read at run-time from a file @code{/etc/mtools}.
@fiindex @code{etc/mtools}
@fiindex @code{mtools}
Moreover a check is performed to detect incorrect @sc{fat} type settings.

The configuration file @code{/etc/mtools} defines the mapping of DOS
drives to Unix devices.
An entry in /etc/mtools can have any of the following formats:

@example
@i{drive device
drive device fat
drive device fat cylinders heads sectors
drive device fat cylinders heads sectors offset}
@end example

@i{drive} is the DOS drive letter, @i{device} is the name of the device on
Unix, @i{fat} is the number of bits a @sc{fat} entry has (either 12 or 16),
@i{cylinders}, @i{heads}, and @i{sectors} describe the disk geometry.
On hard disks, the geometry parameters should all be zero.
@i{offset} specifies how many bytes should be skipped when accessing
the device. This is necessary when using non-standard disk configurations.

The abbreviated entries are valid only on systems for which mtools can
`guess' the disk parameters by looking at the Unix device name.
If this is not possible, an error message is issued.

Here is a sample configuration file:

@example
# /etc/mtools - mtools device definitions

A /dev/fd0 12 80 2 15	# A: 5.25" HD
A /dev/fd0 12 40 2 9	# A: 5.25"
B /dev/fd1 12 80 2 18	# B: 3.5" HD
B /dev/fd1 12 80 2 9	# B: 3.5"
C /dev/hda1 16 0 0 0	# C: 30 MB HD partition
@end example

A portable entry for floppies can be created by using @samp{0 0 0} for
the disk geometry:

@example
# /etc/mtools - portable mtools device definitions

A /dev/fd0 12 0 0 0	# any A:
B /dev/fd1 12 0 0 0	# any B:
@end example

This has the slight disadvantage that @samp{mformat} refuses to work.
If you wish to use @samp{mformat}, you must specify additional entries
in the @code{/etc/mtools} configuration file for the floppy formats
you wish to be able to write.  These are the entries which I use
to format 1.4 Mb floppies in drive 0 and 1.2 Mb floppies in drive 1:

@example
E /dev/fd0 12 80 2 18
F /dev/fd1 12 80 2 15
@end example

Then I can low-level format a floppy using @samp{fdformat}, and add
an @i{msdos} file system with the command @samp{mformat E:} or
@samp{mformat F:}.

It is important to set the @sc{fat} type right because this parameter can't
be computed reliably from other parameters. Mtools tries to detect
possibly incorrect settings and issues an error message. If this check
should be bypassed, the @sc{fat} type has to be specified as a negative
number; for example:

@example
D /dev/hda2 -16 0 0 0
@end example

Determining the correct @sc{fat} type is critical for hard disks.
Writing to a hard disk with an incorrectly set @sc{fat} type will destroy
vital information. If you're not sure whether you have a 12 or a 16
bit @sc{fat}, you should try reading a text file which is bigger than 8 Kb
with the @samp{mtype} command. You can use the commands @samp{mcd} and
@samp{mdir} to locate such a file. The @sc{fat} type is wrong if @samp{mtype}
outputs data from other files after a while. The first few kilobytes are
always read correctly, whether the @sc{fat} type is good or not.

@node Commands, Recovering, Mtools, Using
@section  Commands peculiar to Linux

There are several commands peculiar to Linux, or with features
peculiar to Linux, of which you ought to be aware.
Most of these commands have man pages which give useful information.
After the system is installed, I suggest giving particular attention
to the following commands:

@example
badblocks(8)  fsck.ext2(8)   mkfs(8)          setfdprm(8)
clock(8)      fsck.minix(8)  mkfs.ext2(8)     setfont(8)
doshell(8)    fstab(5)       mkfs.minix(8)    setserial(8)
dumpe2fs(8)   halt(8)        mklost+found(8)  showfont(8)
dumpkeys(1)   init(8)        mkswap(8)        shutdown(8)
fdformat(8)   kbdrate(8)     mount(8)         swapon(8)
frag(8)       killall(1)     rdev(8)          tune2fs(8)
fsck(8)       mapscrn(8)     selection(1)     update(8)
@end example

The command for reading about each of these corresponds to

@example
man 5 fstab
@end example

where the @samp{5} is replaced by the appropriate section number
(usually @samp{8} for these commands), and @samp{fstab} is replaced
with the name of the command.  Most of the manual pages in sections
4 and 5 contain interesting information.  For a list, give the command
@samp{ls /usr/man/cat[45]}.

@node Recovering, , Commands, Using
@section Recovering from Fatal Disasters

You can use the MCC boot floppy to recover from fatal disasters.
@fiindex @code{etc/init}
@fiindex @code{init}
@cindex recovering from disasters
What kind of disaster requires such measures?  Sometimes people
accidentally do things which make the system unbootable.  For example,
they may edit or delete one of the configuration files in @code{/etc},
or they may delete a fundamental utility, like @code{/sbin/init} or
one of the shared libraries in @code{/lib}.

In some of these cases, the system will still boot in single user mode.
@cindex single user mode
To do this you must have installed @sc{lilo} as your boot loader,
even if it is installed in a file system partition and is called
by another boot loader, such as the DOS or OS/2 loaders.
When @sc{lilo} boots, you must force it to prompt you.  No special action
is necessary if you put the @samp{prompt} command instead of the
@samp{delay} command in @code{/etc/lilo.conf}; this forces a prompt
in all cases.

To force @sc{lilo} to prompt, you must perform one of the following actions:
@cindex force LILO to prompt
@iftex
@dosubind{cp}{LILO}{forcing boot prompt}@relax
@end iftex

@itemize @minus
@item Hold the @samp{SHIFT} key down at boot time.
@item Hold the @samp{CTRL} key down at boot time.
@item Hold the @samp{ALT} key down at boot time.
@item Set the @samp{CAPS LOCK} key on at boot time.
@item Set the @samp{SCROLL LOCK} key on at boot time.
@end itemize

When the prompt @samp{boot:} appears, you must type the name of your
default kernel followed by the word @samp{single}; for example,

@example
boot: linux single
@end example

If you don't remember the name of your kernel, press the @samp{TAB} key.
This causes a list of the available options to be displayed.

In very serious cases, when you cannot boot in single user mode,
you may use the MCC boot floppy to recover.
@iftex
@dosubind{cp}{disaster recovery}{using MCC boot floppy}@relax
@end iftex
In the simplest cases, boot from the MCC boot floppy, and give the
command @samp{ro root=@i{xxx}} at the LILO prompt.

If that does not work, boot from the MCC boot floppy, giving the
command @samp{ro} at the LILO prompt.
@fiindex @code{bin/sh}
@fiindex @code{sh}
Place the root floppy in the drive when you are asked to do so.
If the file @code{/bin/sh} is intact on your
hard disk, you can choose @samp{e} from the menu, and this will start
a shell after mounting the various partitions.  At this point, most of
the editors and other utilities should work correctly.  The commands
@samp{mount} and @samp{umount} do not work at all.  Repair the damage,
then reboot the system.  Do not use @samp{halt}, @samp{reboot}, or
@samp{shutdown} to reboot; type @samp{CTRL-D} or @samp{exit}.

In the very worst possible case, for example when @code{/bin/sh} has been
deleted, you can re-install Linux from the MCC floppies.
@fiindex @code{backupdirs}
@fiindex @code{etc/passwd}
@fiindex @code{passwd}
@cindex upgrading MCC Interim Linux
As with all MCC upgrades, this creates a special directory named
@code{/backupdirs}, into which your existing configuration files are
saved; for example, @code{/etc/passwd} is moved to
@code{/backupdirs/etc/passwd}.  It is not possible --- or desirable ---
to leave such files if they exist, since the newly installed system
might not boot.
You will need to install @sc{lilo} boot code again before rebooting.
Use the command

@example
ROOT=/root;lilo
@end example

If you recompile your kernel, or if you use one of the smaller MCC
kernels, you may wish to customise the MCC boot floppy.  Assuming
that you have your kernel in @code{/boot/vmlinuz} and the matching
data file @code{/etc/psdatabase}, mount a `standard' MCC boot floppy
in write mode from drive 0 on @code{/mnt}.  Then give these commands:

@example
cp -p /boot/vmlinuz /mnt
tar cf - /etc/psdatabase|gzip -9 >/mnt/psdata.tgz
lilo -C /mnt/lilo.conf
umount /mnt
@end example

This should produce a recovery system that will boot your own kernel
(so that the @samp{ps} commands all work) and reinstall your own
kernel if you install Linux from the floppy.

@node Documentation, Acknowledgments, Using, Top
@chapter Available Documentation for Linux

The documentation available for Linux can be divided into
online documentation,
collections of Frequently Asked Questions (with answers),
Linux HOWTO documents, the standard for the structure of Linux
file systems, and other sources of information.

@menu
* Online::  Documentation available on line.
* FAQ::     Collections of Frequently Asked Questions.
* HOWTO::   The Linux HOWTO documents.
* FSSTND::  The Linux file system standard.
* Other::   Other information about Linux.
@end menu

@node Online, , FAQ, Documentation
@section Documentation available on line

There are at least four kinds of information available online,
at least if you have installed all of the MCC Interim packages:

@table @r
@item internal help
Many Linux commands contain helpful information of some kind.
@pindex bash
Some, like the @code{bash} shell, contain an interactive @samp{help}
command.  Others, like the @code{tar} command, give help when
certain command line arguments are given, e.g., @samp{--help}
or @samp{--wxyz}.

@item online manuals
The system of online manuals is accessed using the @samp{man} command.
@pindex man
Type @samp{man man} for more information.
In the course of time, more and more manuals are being written or
adapted for Linux.

@item info files
The @dfn{info} system consists of specially formatted manuals
which can be read using the @samp{info} or @samp{emacs} command.
@pindex info
@pindex emacs
These manuals have a complex tree structure, and special commands
allow you to traverse the tree, use the indices, search for strings,
and even jump to other manuals in the info system.

@item text files
I have included in the distribution a few files describing commands
which are otherwise poorly documented on line.
@iftex
@dosubind{cp}{LILO}{documentation}@relax
@end iftex
For example, the @samp{lilo} command has no other information on line,
so I have placed the file @code{README.lilo} in @code{/etc}.
@end table

@node FAQ, Online, HOWTO, Documentation
@section Collections of Frequently Asked Questions

Collections of frequently asked questions, with answers, are a
traditional form of information in the Unix and Usenet communities.
Many of these can be found at @t{ftp.mcc.ac.uk} in the directory
@code{/pub/linux/fi.mirror/doc/FAQ}.

The mail programs in this distribution, @samp{elm} and @samp{smail},
both have informative FAQs.
@pindex emacs
@pindex elm
@pindex smail
The file @code{/usr/lib/emacs/19.22/etc/FAQ} is contained in the MCC
@i{emacs} package.

FAQ files not peculiar to Linux can be found at @t{rtfm.mit.edu}
in a very large directory tree.
Other sites which mirror this tree are @t{ftp.uu.net} in
@code{/usenet/news.answers}, @t{grasp1.univ.lyon1.fr} in
@code{/pub/faq}, and @t{ftp.win.tue.nl} in
@code{/pub/usenet/news.answers}.

@node HOWTO, FAQ, FSSTND, Documentation
@section The Linux HOWTO documents

The Linux community seems to have invented a new kind of document,
more organised (in most cases) than the traditional FAQ file.
This is the HOWTO file, most of which can be found at @t{ftp.mcc.ac.uk}
in the directory @code{/pub/linux/fi.mirror/doc/HOWTO}.

Of particular interest in this category are the HOWTO Index, which
lists the currently available HOWTO files, as well as HOWTO files for
supported hardware, QIC ftape drivers, mail, Net-2, network news,
printing, @sc{scsi} devices, Serial ports, sound hardware and software,
@samp{uucp}, and XFree86.

Many of these documents have not yet been updated to take into account
the new file system standard.  This means that the full path names
of many files and directories will not be the same as those
which you will install on your system as parts of the MCC distribution.

@node FSSTND, HOWTO, Other, Documentation
@section The Linux file system standard

This and other releases of Linux are heavily influenced by the
new standard for the Linux directory structure, @i{Linux Filesystem
Structure}.
@cindex file system standard
@cindex standard, Linux file system
This replaces the long-outdated standard which most distributions
have more or less ignored in the past year.

This MCC Interim release tries to observe the new standard as closely
as possible.  It diverges from the published standard (version 1.0)
in the following respects:

@itemize @minus
@item
Several draft standards have been circulated privately since the
official release of version 1.0.
MCC Interim Linux follows the March 18th draft where it differs from
the earlier document.

@item
The standard, which is still evolving, has not yet specified the
location of many portions of packages such as @TeX{}, newsreaders,
and other software.  Moreover, some software which is not distributed
as part of the MCC package, is not yet available for installation
in conforming packages.  The presence of paths such as @code{/usr/TeX/bin}
in files such as @code{/etc/profile} reflects this.

@item
The standard has specified that C++ include files should not be in
@code{/usr/g++-include}, but in @code{/usr/include/g++}.
This distribution does not feel free to change that location
until after H J Lu has adopted this convention in his `official'
distribution of the @samp{g++} support files.

@item
The standard is, in my view, unclear about the location of keyboard
map files.  I have placed them in @code{/usr/lib/keytables/keytables}
rather than in @code{/etc/keytables/keytables}.
The default map file is in @code{/etc/kbmap}, which was used by
previous MCC distributions.  The standard will probably specify
another name for the default keyboard map file.

@item
The standard specifies that the file @code{/usr/dict/words} should be
required in any fully compliant implementation.
@fiindex @code{usr/dict/words}
@fiindex @code{words}
This file is not contained in the MCC Interim distribution.
A copy of a @code{words} file is available by anonymous ftp
from @t{ftp.mcc.ac.uk} in @code{/pub/linux/binaries-4.5.21/usr/dict/words}.
A contributed package which installs this file is available from
@t{ftp.mcc.ac.uk} in @code{/bin/linux/mcc-interim/1.0+/contributions}.

@item
The standard specifies that @code{/usr/include/asm} and
@code{/usr/include/linux} should be symbolic links to subdirectories of
@code{/usr/src/linux/include}, but in this distribution the actual files
are installed in @code{/usr/include}.
This document contains instructions for moving the files to the
standard location.
@xref{Kernel, , Recompiling the kernel}.
@end itemize

In the terms defined in the March 18 draft of the Linux file system standard,
I believe that the MCC Interim version is `fully compatible' with the
standard, and that only the absence of @code{/usr/dict/words} and
the location of the files in @code{/usr/g++-include}, @code{/usr/include/asm},
and @code{/usr/include/linux} prevent it from being `fully compliant'.

@node Other, FSSTND, , Documentation
@section Other information about Linux

The Linux Documentation Project has produced four largish volumes,
which are available by anonymous ftp and in a commercially printed form.
@cindex @i{Linux Installation and Getting Started}
Newcomers should note particularly @i{Linux Installation and Getting
Started}, by Matt Welsh.  This contains a lot of useful information,
as well as pointers to other sources of information.
It is written in a clear but conversational style, and so may be
particularly helpful to beginners.
@pindex vi
The book contains discussions
of basic commands, including shell commands, pipes and redirection,
file permissions, job control, the @samp{vi} editor, shell scripts,
system administration, and many other topics.  It also contains
a list of recommended books about Unix.

The @i{Linux System Administrator's Guide}, by Lars Wirzenius, is
also quite useful and informative.
@cindex @i{Linux System Administrator's Guide}
The present version is older than the Linux file system standard,
and much information is missing or not yet written.  These places
are marked with the word @samp{@strong{META}} in bold type.
But the booklet contains much useful information
that is otherwise difficult to find.

For these and other works from the Linux Documentation Project,
see @t{ftp.mcc.ac.uk} in the directory
@code{/pub/linux/fi.mirror/doc/doc-project}.

Another source of information about Linux is the USENET news service,
where there are a growing number of @t{comp.os.linux} groups.
There are also several mailing lists related to Linux.
For further information about mailing lists and USENET news groups
which are relevant to Linux, see @i{Linux Installation and Getting Started}.

@node Acknowledgments, , Documentation, Top
@appendix Acknowledgments

This distribution of Linux owes a great deal to the testers who have
helped find various problems before the system was released, and to
all those who have reported difficulties and sent in patches.

The following information acknowledges only the primary author of
each command.  In many cases a program has been largely rewritten
or altered by a number of contributors; you must consult the source
for more information.
@fiindex @code{usr/src/linux/CREDITS}
@fiindex @code{CREDITS}
Please note in particular the file
@code{/usr/src/linux/CREDITS}, which contains the names of many
programmers who have contributed to the development of the Linux kernel.

@ifinfo
The details in this section are available only in the printed manual.
@end ifinfo

@iftex
The suffix @code{.tgz} is omitted from the names of the package
and source files.
The following commands are installed by MCC Interim packages:@*

@catcode `#=6
@def@pitem#1{@doind{pg}{@code{#1}}@code{#1}}
@catcode`@#=@other
@tex
\halign{#\hfil&\quad\tt #\hfil&\quad\tt #\hfil&\quad\tt
 #\hfil&\quad\rm #\hfil\cr
\rm Command&\rm Directory&\rm Package&\rm Source&Author(s)\cr
\noalign{\vskip 10pt}
\pitem{[}&/usr/bin&base2&shelu194&GNU\cr
\pitem{addftinfo}&/usr/bin&groff&groff109&James Clark\cr
\pitem{afmtodit}&/usr/bin&groff&groff109&James Clark\cr
\pitem{apropos}&/usr/bin&base1&man11a&John Eaton\cr
\pitem{ar}&/usr/bin&gcca&binu19l4&GNU\cr
\pitem{arch}&/bin&base1&utilx15&Rickard E Faith\cr
\pitem{as}&/usr/bin&gcca&gas22&GNU\cr
\pitem{as86}&/usr/bin&gcca&bin8601&Bruce Evans\cr
\pitem{awk}&/usr/bin&gawk&gawk2154&GNU\cr
\pitem{badblocks}&/sbin&base1&e2fscm15&Remy Card\cr
\pitem{banner}&/usr/bin&base2&utilx15&BSD\cr
\pitem{basename}&/usr/bin&base1&shelu194&GNU\cr
\pitem{bash}&/bin&base1&bash1135&Brian Fox, GNU\cr
\pitem{bison}&/usr/bin&bison&bison122&GNU\cr
\pitem{brik}&/usr/bin&base1&brik155&Rahul Dhesi\cr
\pitem{c++}&/usr/bin&gpp&gcc258&GNU\cr
\pitem{cal}&/usr/bin&base1&utilx15&BSD\cr
\pitem{cat}&/bin&base1&txtu19&GNU\cr
\pitem{cc}&/usr/bin&gcca&gcc258&GNU\cr
\pitem{chattr}&/usr/bin&base2&e2fscm15&Remy Card\cr
\pitem{checkalias}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{chgrp}&/bin&base1&filu39&GNU\cr
\pitem{chmod}&/bin&base1&filu39&GNU\cr
\pitem{chown}&/bin&base1&filu39&GNU\cr
\pitem{chroot}&/usr/sbin&base1&utilx15&Rick Sladkey\cr
\pitem{chsh}&/usr/bin&base1&utilx15&Peter Orbaek\cr
\pitem{cksum}&/usr/bin&base1&txtu19&GNU\cr
\pitem{clock}&/sbin&base1&utilx15&Charles Hedrick\cr
\pitem{cmp}&/usr/bin&base1&diffu26&T Granlund, D MacKenzie\cr
\pitem{col}&/usr/bin&base2&utilx15&BSD\cr
\pitem{colcrt}&/usr/bin&base2&utilx15&BSD\cr
\pitem{colrm}&/usr/bin&base2&utilx15&BSD\cr
\pitem{column}&/usr/bin&base2&utilx15&BSD\cr
\pitem{comm}&/usr/bin&base1&txtu19&GNU\cr
\pitem{compress}&/usr/bin&base1&comp401&Joseph M Orost\cr
\pitem{cp}&/bin&base1&filu39&GNU\cr
\pitem{cpio}&/usr/bin&base1&cpio23&GNU\cr
\pitem{cpp}&/usr/bin&gccb&gcc258&GNU\cr
\pitem{csplit}&/usr/bin&base1&txtu19&GNU\cr
\pitem{ctags}&/usr/bin&base1&elvi17&Steve Kirkendall\cr
\pitem{ctrlaltdel}&/usr/sbin&base1&utilx15&Peter Orbaek\cr
\pitem{cut}&/usr/bin&base1&txtu19&GNU\cr
\pitem{date}&/bin&base1&shelu194&GNU\cr
\pitem{dd}&/bin&base1&filu39&GNU\cr
\pitem{debugfs}&/usr/sbin&base2&e2fscm15&Theodore Ts'o\cr
\pitem{df}&/bin&base1&filu39&GNU\cr
\pitem{diff}&/usr/bin&base2&diffu26&Mike Haertel et al\cr
\pitem{diff3}&/usr/bin&base2&diffu26&Randy Smith\cr
\pitem{dir}&/bin&base1&filu39&GNU\cr
\pitem{dirdump}&/usr/sbin&base1&e2fsp04a&Remy Card\cr
\pitem{dirname}&/usr/bin&base1&shelu194&GNU\cr
\pitem{dmesg}&/bin&base1&utilx15&Theodore Ts'o\cr
\pitem{domainname}&/bin&tcpip&utilx15&Peter Orbaek\cr
\pitem{doshell}&/usr/bin&base1&utilx15&Jim Wiegand\cr
\pitem{du}&/usr/bin&base1&filu39&GNU\cr
\pitem{dumpe2fs}&/usr/sbin&base2&e2fscm15&Remy Card\cr
\pitem{dumpkeys}&/usr/bin&base1&kbd085&Risto Kankkunen\cr
\pitem{echo}&/bin&base1&shelu194&GNU\cr
\pitem{ed}&/bin&base2&utilx15&BSD/Kernighan/Plauger\cr
\pitem{egrep}&/usr/bin&base1&grep20&GNU\cr
\pitem{elm}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{elmalias}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{elvis}&/usr/bin&base2&elvi17&Steve Kirkendall\cr
\pitem{elvprsv}&/usr/bin&base1&elvi17&Steve Kirkendall\cr
\pitem{elvrec}&/usr/bin&base1&elvi17&Steve Kirkendall\cr
\pitem{emacs}&/usr/bin&emacs&emac1922&Richard M Stallman\cr
\pitem{emacs-19.22}&/usr/bin&emacs&emac1922&Richard M Stallman\cr
\pitem{emacsclient}&/usr/bin&emacs&emac1922&Richard M Stallman\cr
\pitem{env}&/usr/bin&base1&shelu194&GNU\cr
\pitem{etags}&/usr/bin&emacs&emac1922&Richard M Stallman\cr
\pitem{ex}&/usr/bin&base2&elvi17&Steve Kirkendall\cr
\pitem{expand}&/usr/bin&base1&txtu19&GNU\cr
\pitem{expr}&/usr/bin&base1&shelu194&GNU\cr
\pitem{false}&/bin&base1&shelu194&GNU\cr
\pitem{fastmail}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{fdformat}&/usr/bin&base1&utilx15&Werner Almesberger\cr
\pitem{fdisk}&/sbin&base1&fdisk15&A V Le Blanc\cr
\pitem{fgrep}&/usr/bin&base1&grep20&GNU\cr
\pitem{file}&/usr/bin&base1&file&Ian F Darwin\cr
\pitem{filter}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{find}&/usr/bin&base1&find38&GNU\cr
\pitem{finger}&/usr/bin&tcpip&netsr25m&BSD\cr
\pitem{fingerd}&/usr/sbin&tcpip&netsr25m&BSD\cr
\pitem{flex}&/usr/bin&flex&flex246&Vern Paxson\cr
\pitem{flex++}&/usr/bin&flex&flex246&Vern Paxson\cr
\pitem{fmt}&/usr/bin&base1&elvi17&Steve Kirkendall\cr
\pitem{fold}&/usr/bin&base1&txtu19&GNU\cr
\pitem{frag}&/usr/sbin&base1&utilx15&Werner Almesberger\cr
\pitem{free}&/usr/bin&base1&procps08&Brian Edmonds\cr
\pitem{frm}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{fsck}&/sbin&base1&utilx15&David Engel\cr
\pitem{fsck.ext2}&/sbin&base1&e2fscm15&Theodore Ts'o\cr
\pitem{fsck.minix}&/sbin&base1&utilx15&Linus Torvalds\cr
\pitem{ftp}&/usr/bin&tcpip&netsr25m&BSD\cr
\pitem{ftpd}&/usr/sbin&tcpip&netsr25m&BSD\cr
\pitem{fuser}&/usr/bin&base1&procps08&Werner Almesberger\cr
\pitem{g++}&/usr/bin&gpp&gcc258&GNU\cr
\pitem{gawk}&/usr/bin&gawk&gawk2154&GNU\cr
\pitem{gcc}&/usr/bin&gcca&gcc258&GNU\cr
\pitem{gdb}&/usr/bin&gdb&gdb412&GNU\cr
\pitem{genclass}&/usr/bin&gpp&lg++253&GNU\cr
\pitem{geqn}&/usr/bin&groff&groff109&James Clark\cr
\pitem{getty}&/sbin&base1&gtyp207b&Paul Sutcliffe Jr\cr
\pitem{gindxbib}&/usr/bin&groff&groff109&James Clark\cr
\pitem{glookbib}&/usr/bin&groff&groff109&James Clark\cr
\pitem{gneqn}&/usr/bin&groff&groff109&James Clark\cr
\pitem{gnroff}&/usr/bin&groff&groff109&James Clark\cr
\pitem{gpic}&/usr/bin&groff&groff109&James Clark\cr
\pitem{gprof}&/usr/bin&gprof&binu19l4&GNU\cr
\pitem{grefer}&/usr/bin&groff&groff109&James Clark\cr
\pitem{grep}&/usr/bin&base1&grep20&GNU\cr
\pitem{grodvi}&/usr/bin&groff&groff109&James Clark\cr
\pitem{groff}&/usr/bin&groff&groff109&James Clark\cr
\pitem{grog}&/usr/bin&groff&groff109&James Clark\cr
\pitem{grops}&/usr/bin&groff&groff109&James Clark\cr
\pitem{grotty}&/usr/bin&groff&groff109&James Clark\cr
\pitem{groups}&/usr/bin&base1&shelu194&GNU\cr
\pitem{gsoelim}&/usr/bin&groff&groff109&James Clark\cr
\pitem{gtbl}&/usr/bin&groff&groff109&James Clark\cr
\pitem{gtroff}&/usr/bin&groff&groff109&James Clark\cr
\pitem{gunzip}&/usr/bin&base1&gzip124&Jean-loup Gailly\cr
\pitem{gzexe}&/usr/bin&base2&gzip124&Jean-loup Gailly\cr
\pitem{gzip}&/usr/bin&base1&gzip124&Jean-loup Gailly\cr
\pitem{halt}&/sbin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{head}&/usr/bin&base1&txtu19&GNU\cr
\pitem{hexdump}&/usr/bin&base2&utilx15&BSD\cr
\pitem{hostname}&/bin&base1&mccmisc&Fred N van Kempen\cr
\pitem{id}&/usr/bin&base1&shelu194&GNU\cr
\pitem{ifconfig}&/sbin&tcpip&netsr25m&Fred N van Kempen\cr
\pitem{iflink}&/sbin&tcpip&netsr25m&Fred N van Kempen\cr
\pitem{ifsetup}&/sbin&tcpip&netsr25m&Fred N van Kempen\cr
\pitem{inetd}&/usr/sbin&tcpip&netsr25m&BSD\cr
\pitem{info}&/usr/bin&info&texi31&Brian Fox\cr
\pitem{init}&/sbin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{install}&/usr/bin&base1&filu39&GNU\cr
\pitem{install.lilo}&/usr/sbin&base2&-&A V Le Blanc\cr
\pitem{install.mail}&/usr/sbin&mail&-&Ian Kluft\cr
\pitem{install.net}&/usr/sbin&tcpip&-&A V Le Blanc\cr
\pitem{ipcrm}&/usr/bin&base1&utilx15&Krishna Balasubramanian\cr
\pitem{ipcs}&/usr/bin&base1&utilx15&Krishna Balasubramanian?\cr
\pitem{joe}&/usr/bin&base2&joe108&Joseph H Allen\cr
\pitem{join}&/usr/bin&base1&txtu19&GNU\cr
\pitem{kbdinstall}&/usr/sbin&base2&mccmisc&A V Le Blanc\cr
\pitem{kbdrate}&/sbin&base1&utilx15&Rickard E Faith\cr
\pitem{kermit}&/usr/bin&kermit&ckrmu189&Frank da Cruz\cr
\pitem{kill}&/bin&base1&utilx15&Peter MacDonald\cr
\pitem{killall}&/bin&base1&procps08&Werner Almesberger\cr
\pitem{last}&/usr/bin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{ld}&/usr/bin&gcca&binu19l4&GNU\cr
\pitem{ld86}&/usr/bin&gcca&bin8601&Bruce Evans\cr
\pitem{ldconfig}&/usr/sbin&base1&ldso143&David Engel, Mitch D'Souza\cr
\pitem{ldd}&/usr/bin&base1&ldso143&David Engel\cr
\pitem{less}&/usr/bin&base2&less177&Mark Nudelman\cr
\pitem{lesskey}&/usr/bin&base2&less177&Mark Nudelman\cr
\pitem{lilo}&/sbin&base1&lilo14&Werner Almesberger\cr
\pitem{listalias}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{lkbib}&/usr/bin&groff&groff109&James Clark\cr
\pitem{ll}&/bin&base1&filu39&GNU\cr
\pitem{ln}&/bin&base1&filu39&GNU\cr
\pitem{loadkeys}&/bin&base1&kbd085&Risto Kankkunen\cr
\pitem{locate}&/usr/bin&base1&find38&GNU\cr
\pitem{logger}&/usr/bin&base1&utilx15&BSD\cr
\pitem{login}&/bin&base1&utilx15&BSD\cr
\pitem{logname}&/usr/bin&base1&shelu194&GNU\cr
\pitem{look}&/usr/bin&base1&utilx15&Rickard E Faith\cr
\pitem{lpc}&/usr/bin&lp&netsr25m&BSD\cr
\pitem{lpd}&/usr/sbin&lp&netsr25m&BSD\cr
\pitem{lpf}&/usr/sbin&lp&netsr25m&BSD\cr
\pitem{lpq}&/usr/bin&lp&netsr25m&BSD\cr
\pitem{lpr}&/usr/bin&lp&netsr25m&BSD\cr
\pitem{lprm}&/usr/bin&lp&netsr25m&BSD\cr
\pitem{lptest}&/usr/bin&lp&netsr25m&BSD\cr
\pitem{ls}&/bin&base1&filu39&GNU\cr
\pitem{lsattr}&/usr/bin&base2&e2fscm15&Remy Card\cr
\pitem{lsf}&/bin&base1&filu39&GNU\cr
\pitem{mail}&/usr/bin&mail&smai3128&M Horton, L C Noll\cr
\pitem{mailq}&/usr/bin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{make}&/usr/bin&gcca&make370&GNU\cr
\pitem{makehole}&/usr/sbin&base1&mccmisc&H J Lu\cr
\pitem{makeinfo}&/usr/bin&info&texi31&Brian Fox\cr
\pitem{makewhatis}&/usr/sbin&base1&man11a&John Eaton\cr
\pitem{man}&/usr/bin&base2&man11a&John Eaton\cr
\pitem{manpath}&/usr/bin&base2&man11a&John Eaton\cr
\pitem{mapscrn}&/usr/bin&base1&kbd085&Andries Brouwer\cr
\pitem{mattrib}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mccinstall}&/usr/sbin&base1&-&A V Le Blanc\cr
\pitem{mcd}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mcopy}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mdel}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mdir}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mesg}&/usr/bin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{messages}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{mformat}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mk\_modmap}&/usr/bin&base1&kbd085&Kjetil T Homme\cr
\pitem{mkaliases}&/usr/bin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{mkdir}&/bin&base1&filu39&GNU\cr
\pitem{mkfifo}&/usr/bin&base1&filu39&GNU\cr
\pitem{mkfs}&/sbin&base1&utilx15&David Engel\cr
\pitem{mkfs.ext2}&/sbin&base1&e2fscm15&Theodore Ts'o\cr
\pitem{mkfs.minix}&/sbin&base1&utilx15&Linus Torvalds\cr
\pitem{mklost+found}&/usr/sbin&base1&e2fscm15&Remy Card\cr
\pitem{mkmanifest}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mknod}&/bin&base1&filu39&GNU\cr
\pitem{mksuper}&/usr/bin&base1&e2fsp04a&Remy Card\cr
\pitem{mkswap}&/sbin&base1&utilx15&Linus Torvalds\cr
\pitem{mlabel}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mmd}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{more}&/bin&base1&utilx15&BSD\cr
\pitem{mount}&/bin&base1&utilx15&Doug Quale\cr
\pitem{mrd}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mread}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mren}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mt}&/usr/bin&base2&cpio23&GNU\cr
\pitem{mtype}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{mv}&/bin&base1&filu39&GNU\cr
\pitem{mwrite}&/usr/bin&base2&mtoln2&Emmet P Gray\cr
\pitem{neqn}&/usr/bin&groff&groff109&James Clark\cr
\pitem{netstat}&/bin&tcpip&netsr25m&Fred Baumgarten\cr
\pitem{newalias}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{newaliases}&/usr/bin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{newgrp}&/usr/bin&base1&utilx15&Michael Haardt\cr
\pitem{newmail}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{nfrm}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{nice}&/usr/bin&base1&shelu194&GNU\cr
\pitem{nl}&/usr/bin&base1&txtu19&GNU\cr
\pitem{nm}&/usr/bin&gcca&binu19l4&GNU\cr
\pitem{nohup}&/usr/bin&base1&shelu194&GNU\cr
\pitem{nroff}&/usr/bin&groff&groff109&James Clark\cr
\pitem{nslookup}&/usr/bin&tcpip&netsr25m&BSD\cr
\pitem{nsquery}&/usr/bin&tcpip&netsr25m&BSD\cr
\pitem{ntalkd}&/usr/sbin&tcpip&netsr25m&BSD\cr
\pitem{objdump}&/usr/bin&gcca&binu19l4&GNU\cr
\pitem{od}&/usr/bin&base2&txtu19&GNU\cr
\pitem{passwd}&/usr/bin&base1&utilx15&Peter Orbaek\cr
\pitem{paste}&/usr/bin&base1&txtu19&GNU\cr
\pitem{patch}&/usr/bin&base2&patch21&Larry Wall\cr
\pitem{pathchk}&/usr/bin&base1&shelu194&GNU\cr
\pitem{pathto}&/usr/bin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{pfbtops}&/usr/bin&groff&groff109&James Clark\cr
\pitem{ping}&/bin&tcpip&netsr25m&BSD\cr
\pitem{powerd}&/sbin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{pr}&/usr/bin&base2&txtu19&GNU\cr
\pitem{printenv}&/usr/bin&base1&shelu194&GNU\cr
\pitem{printf}&/usr/bin&base1&shelu194&GNU\cr
\pitem{printmail}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{protoize}&/usr/bin&gcca&gcc258&GNU\cr
\pitem{ps}&/bin&base1&procps08&Branko Lankester\cr
\pitem{psbb}&/usr/bin&groff&groff109&James Clark\cr
\pitem{pstree}&/usr/bin&base1&procps08&Werner Almesberger\cr
\pitem{psupdate}&/usr/sbin&base1&procps08&Branko Lankester\cr
\pitem{pwd}&/bin&base1&utilx15&BSD\cr
\pitem{ramsize}&/usr/bin&base1&utilx15&Werner Almesberger\cr
\pitem{ranlib}&/usr/bin&gcca&binu19l4&GNU\cr
\pitem{rcp}&/usr/bin&tcpip&netsr25m&BSD\cr
\pitem{rdev}&/usr/bin&base1&utilx15&Werner Almesberger\cr
\pitem{readmsg}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{reboot}&/sbin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{ref}&/usr/bin&base1&elvi17&Steve Kirkendall\cr
\pitem{renice}&/usr/bin&base1&utilx15&BSD\cr
\pitem{rev}&/usr/bin&base1&utilx15&BSD\cr
\pitem{rlogin}&/usr/bin&tcpip&netsr25m&BSD\cr
\pitem{rlogind}&/usr/sbin&tcpip&netsr25m&BSD\cr
\pitem{rm}&/bin&base1&filu39&GNU\cr
\pitem{rmail}&/usr/bin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{rmdir}&/bin&base1&filu39&GNU\cr
\pitem{rootflags}&/usr/bin&base1&utilx15&Werner Almesberger\cr
\pitem{route}&/sbin&tcpip&netsr25m&Fred N van Kempen\cr
\pitem{rsh}&/usr/bin&tcpip&netsr25m&BSD\cr
\pitem{rshd}&/usr/sbin&tcpip&netsr25m&BSD\cr
\pitem{rsmtp}&/usr/bin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{runlevel}&/usr/bin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{runq}&/usr/bin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{script}&/usr/bin&base1&utilx15&BSD\cr
\pitem{sdiff}&/usr/bin&base2&diffu26&Thomas Lord\cr
\pitem{sed}&/usr/bin&base1&sed203&GNU\cr
\pitem{selection}&/usr/bin&base2&utilx15&Andrew Haylett\cr
\pitem{sendmail}&/usr/sbin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{setfdprm}&/usr/bin&base1&utilx15&Werner Almesberger\cr
\pitem{setfont}&/usr/bin&base1&kbd085&E Crosser, A Brouwer\cr
\pitem{setleds}&/usr/bin&base1&kbd085&Andries Brouwer\cr
\pitem{setmetamode}&/usr/bin&base1&kbd085&Andries Brouwer\cr
\pitem{setserial}&/bin&base1&setsr202&Michael K Johnson\cr
\pitem{setsid}&/usr/bin&base1&utilx15&Rick Sladkey\cr
\pitem{setterm}&/usr/bin&base1&utilx15&Gordon Irlam\cr
\pitem{sh}&/bin&base1&bash1135&Brian Fox, GNU\cr
\pitem{showfont}&/usr/bin&base1&kbd085&Andries Brouwer\cr
\pitem{showkey}&/usr/bin&base1&kbd085&Risto Kankkunen\cr
\pitem{shutdown}&/sbin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{size}&/usr/bin&gcca&binu19l4&GNU\cr
\pitem{sleep}&/usr/bin&base1&shelu194&GNU\cr
\pitem{smail}&/usr/bin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{smtpd}&/usr/bin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{sort}&/usr/bin&base1&txtu19&GNU\cr
\pitem{split}&/usr/bin&base1&txtu19&GNU\cr
\pitem{strings}&/usr/bin&base1&utilx15&BSD\cr
\pitem{strip}&/usr/bin&gcca&binu19l4&GNU\cr
\pitem{stty}&/bin&base1&shelu194&GNU\cr
\pitem{su}&/bin&base1&shelu194&GNU\cr
\pitem{sum}&/usr/bin&base1&txtu19&GNU\cr
\pitem{swapdev}&/usr/bin&base1&utilx15&Werner Almesberger\cr
\pitem{swapoff}&/sbin&base1&utilx15&Doug Quale\cr
\pitem{swapon}&/sbin&base1&utilx15&Doug Quale\cr
\pitem{sync}&/bin&base1&utilx15&Linus Torvalds\cr
\pitem{syslogd}&/usr/sbin&base1&utilx15&BSD\cr
\pitem{tac}&/usr/bin&base1&txtu19&GNU\cr
\pitem{tail}&/usr/bin&base1&txtu19&GNU\cr
\pitem{talk}&/usr/bin&tcpip&netsr25m&BSD\cr
\pitem{tar}&/usr/bin&base2&tar1112&GNU\cr
\pitem{tbl}&/usr/bin&groff&groff109&James Clark\cr
\pitem{tee}&/usr/bin&base1&shelu194&GNU\cr
\pitem{telinit}&/sbin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{telnet}&/usr/bin&tcpip&netsr25m&BSD\cr
\pitem{telnetd}&/usr/sbin&tcpip&netsr25m&BSD\cr
\pitem{test}&/usr/bin&base2&shelu194&GNU\cr
\pitem{tfmtodit}&/usr/bin&groff&groff109&James Clark\cr
\pitem{time}&/usr/bin&base1&time16&GNU\cr
\pitem{tload}&/usr/bin&base1&procps08&Branko Lankester\cr
\pitem{top}&/usr/bin&base1&procps08&Roger Binns\cr
\pitem{touch}&/usr/bin&base1&filu39&GNU\cr
\pitem{tr}&/usr/bin&base1&txtu19&GNU\cr
\pitem{true}&/bin&base1&shelu194&GNU\cr
\pitem{tsort}&/usr/bin&base1&utilx15&BSD\cr
\pitem{tty}&/usr/bin&base1&shelu194&GNU\cr
\pitem{tune2fs}&/sbin&base1&e2fscm15&Remy Card\cr
\pitem{ul}&/usr/bin&base1&utilx15&BSD\cr
\pitem{umount}&/bin&base1&utilx15&Doug Quale\cr
\pitem{uname}&/bin&base1&shelu194&GNU\cr
\pitem{uncompress}&/usr/bin&base1&comp401&Joseph M Orost\cr
\pitem{unexpand}&/usr/bin&base1&txtu19&GNU\cr
\pitem{uniq}&/usr/bin&base1&txtu19&GNU\cr
\pitem{unprotoize}&/usr/bin&gcca&gcc258&GNU\cr
\pitem{update}&/sbin&base1&utilx15&Linus Torvalds\cr
\pitem{updatedb}&/usr/sbin&base1&find38&GNU\cr
\pitem{uptime}&/usr/bin&base1&procps08&Michael K Johnson\cr
\pitem{users}&/usr/bin&base1&-&?\cr
\pitem{utmpdump}&/usr/sbin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{uudecode}&/usr/bin&base1&uuenc10&GNU, BSD\cr
\pitem{uuencode}&/usr/bin&base1&uuenc10&GNU, BSD\cr
\pitem{uugetty}&/sbin&base2&gtyp207b&Paul Sutcliffe Jr\cr
\pitem{uupath}&/usr/bin&mail&smai3128&R S Karr, L C Noll\cr
\pitem{uuwho}&/usr/bin&mail&smai3128&Gordon Moffett\cr
\pitem{vdir}&/bin&base1&filu39&GNU\cr
\pitem{vi}&/usr/bin&base2&elvi17&Steve Kirkendall\cr
\pitem{vidmode}&/usr/bin&base1&utilx15&Werner Almesberger\cr
\pitem{virec}&/usr/bin&base1&elvi17&Steve Kirkendall\cr
\pitem{vlock}&/usr/bin&base2&vlock06&Michael K Johnson\cr
\pitem{vmlinuz}&/boot&base2&lx10&Linus Torvalds\cr
\pitem{w}&/usr/bin&base2&procps08&Larry Greenfield\cr
\pitem{wall}&/usr/bin&base1&svini250&Miquel van Smoorenburg\cr
\pitem{wc}&/usr/bin&base1&txtu19&GNU\cr
\pitem{wdsetup}&/sbin&tcpip&netsr25m&Gregg Weber\cr
\pitem{whatis}&/usr/bin&base1&man11a&John Eaton\cr
\pitem{whereis}&/usr/bin&base1&utilx15&BSD\cr
\pitem{who}&/usr/bin&base1&shelu194&GNU\cr
\pitem{whoami}&/usr/bin&base1&shelu194&GNU\cr
\pitem{wnewmail}&/usr/bin&mail&elm24&Dave Taylor\cr
\pitem{write}&/usr/bin&base1&utilx15&BSD\cr
\pitem{xargs}&/usr/bin&base1&find38&GNU\cr
\pitem{yes}&/usr/bin&base1&shelu194&GNU\cr
\pitem{zcat}&/usr/bin&base1&gzip124&Jean-loup Gailly\cr
\pitem{zcmp}&/usr/bin&base2&gzip124&Jean-loup Gailly\cr
\pitem{zdiff}&/usr/bin&base2&gzip124&Jean-loup Gailly\cr
\pitem{zdump}&/usr/bin&timezone&utilx15&?\cr
\pitem{zforce}&/usr/bin&base1&gzip124&Jean-loup Gailly\cr
\pitem{zgrep}&/usr/bin&base2&gzip124&Jean-loup Gailly\cr
\pitem{zic}&/usr/bin&timezone&utilx15&?\cr
\pitem{zmore}&/usr/bin&base1&gzip124&Jean-loup Gailly\cr
\pitem{znew}&/usr/bin&base1&gzip124&Jean-loup Gailly\cr
}
@end tex
@end iftex

@node File Index, Program Index, Concept Index, Top
@unnumbered File Index
@printindex fi

@node Program Index, , File Index, Top
@unnumbered Program Index

Linux programs appear in lower case, and DOS programs
appear in upper case.

@printindex pg

@node Concept Index, File Index, , Top
@unnumbered Concept Index
@printindex cp

@contents
@bye
