Setting Up Unix - Seventh Edition

From Computer History Wiki
Jump to: navigation, search

This is pretty much verbatim from the tape, although its formatting may need some love.

See Installing Unix Seventh Edition for an explanation of what's actually happening.

             Setting Up Unix - Seventh Edition

                      Charles B. Haley
                     Dennis M. Ritchie

                     Bell Laboratories
               Murray Hill, New Jersey 07974

     The distribution  tape  can  be  used  only  on  a  DEC
PDP11/45  or  PDP11/70 with RP03, RP04, RP05, RP06 disks and
with a TU10, TU16, or TE16 tape drive.  It consists of  some
preliminary bootstrapping programs followed by two file sys-
tem images; if needed, after the initial construction of the
file  systems  individual  files can be extracted. (See res-

     If you are set up to do it, it might  be  a  good  idea
immediately  to  make  a  copy  of the tape to guard against
disaster.  The tape is 9-track 800  BPI  and  contains  some
512-byte records followed by many 10240-byte records.  There
are interspersed tapemarks.

     The system as distributed contains binary images of the
system  and  all  the user level programs, along with source
and manual sections for them about  2100  files  altogether.
The  binary  images, along with other things needed to flesh
out the file system enough so UNIX will run, are to  be  put
on  one file system called the `root file system'.  The file
system size required is about 5000 blocks.  The file  second
system  has all of the source and documentation.  Altogether
it amounts to more than 18,000 512-byte blocks.

Making a Disk From Tape

     Perform the following bootstrap procedure to  obtain  a
disk with a root file system on it.

1.   Mount the magtape on drive 0 at load point.

2.   Mount a formatted disk pack on drive 0.

3.   Key in and execute at 100000

                     September 22, 1988

                           - 2 -

          TU10                    TU16/TE16
        012700                  Use the DEC ROM or other
        172526                  means to load block 1
        010040                  (i.e. second block) at 800 BPI
        012740                  into location 0 and transfer
        060003                  to 0.

     The tape should move and the CPU loop.  (The TU10  code
     is not the DEC bulk ROM for tape; it reads block 0, not
     block 1.)

4.   If you used the above TU10 code, halt and  restart  the
     CPU at 0, otherwise continue to the next step.

5.   The console should type


     Copy the magtape to disk by  the  following  procedure.
     The  machine's  printouts are shown in italic, explana-
     tory comments are within ( ).  Terminate each line  you
     type  by  carriage  return or line-feed.  There are two
     classes of tape drives: the name `tm' is used  for  the
     TU10, and `ht' is used for the TU16 or TE16.  There are
     also two classes of disks: `rp' is used for  the  RP03,
     and `hp' is used for the RP04/5/6.

     If you should make a mistake while typing, the  charac-
ter  '#' erases the last character typed up to the beginning
of the line, and the character '@' erases  the  entire  line
typed.   Some  consoles  cannot  print  lower  case letters,
adjust the instructions accordingly.

        (bring in the program mkfs)
        :tm(0,3)                (use `ht(0,3)' for the TU16/TE16)
        file system size: 5000
        file system: rp(0,0)            (use `hp(0,0)' for RP04/5/6)
        isize = XX
        m/n = XX
        (after a while)
        exit called

This step makes an empty file system.

6.   The next thing to do is to restore the  data  onto  the
     new  empty  file  system. To do this you respond to the
     `:' printed in the last step with

                     September 22, 1988

                           - 3 -

             (bring in the program restor)
             :tm(0,4)                (`ht(0,4)' for TU16/TE16)
             tape? tm(0,5)   (use `ht(0,5)' for TU16/TE16)
             disk? rp(0,0)           (use `hp(0,0)' for RP04/5/6)
             Last chance before scribbling on disk. (you type return)
             (the tape moves, perhaps 5-10 minutes pass)
             end of tape

     You now have a UNIX root file system.

Booting UNIX

     You probably have the bootstrap running, left over from
the  last  step above; if not, repeat the boot process (step
3) again.  Then use one of the following:

        :rp(0,0)rptmunix                (for RP03 and TU10)
        :rp(0,0)rphtunix                (for RP03 and TU16/TE16)
        :hp(0,0)hptmunix                (for RP04/5/6 and TU10)
        :hp(0,0)hphtunix                (for RP04/5/6 and TU16/TE16)

The machine should type the following:

        mem = xxx

The mem message gives the memory available to user  programs
in bytes.

     UNIX is now running, and the `UNIX Programmer's manual'
applies;  references below of the form X(Y) mean the subsec-
tion named X in section Y of the manual.   The  `#'  is  the
prompt from the Shell, and indicates you are the super-user.
The user name of the super-user is `root' if you should find
yourself in multi-user mode and need to log in; the password
is also `root'.

     To simplify your life  later,  rename  the  appropriate
version  of  the system as specified above plain `unix.' For
example, use mv (1) as follows if you have an RP04/5/6 and a
TU16 tape:

        mv hphtunix unix

In the future, when you reboot, you can type just


to the `:' prompt.  (Choose appropriately among `hp',  `rp',
`ht', `tm' according to your configuration).

                     September 22, 1988

                           - 4 -

     You now need to make some special file entries  in  the
dev  directory. These specify what sort of disk you are run-
ning on, what sort of tape drive you  have,  and  where  the
file  systems are. For simplicity, this recipe creates fixed
device names.  These names will be used below, and  some  of
them  are built into various programs, so they are most con-
venient.  However, the names do  not  always  represent  the
actual  major  and  minor  device in the manner suggested in
section 4 of the Programmer's Manual.   For  example,  `rp3'
will  be  used  for the name of the file system on which the
user file system is put, even though it might be on an  RP06
and  is  not logical device 3.  Also, this sequence will put
the user file system on the same disk  drive  as  the  root,
which is not the best place if you have more than one drive.
Thus the prescription below should  be  taken  only  as  one
example  of  where  to  put things.  See also the section on
`Disk layout' below.

     In any event, change to the dev directory (cd(1))  and,
if  you  like, examine and perhaps change the makefile there
(make (1)).

        cd /dev
        cat makefile

Then, use one of

        make rp03
        make rp04
        make rp05
        make rp06

depending on which disk you have.  Then, use one of

        make tm
        make ht

depending on which tape you have.  The file `rp0' refers  to
the  root file system; `swap' to the swap-space file system;
`rp3' to the user  file  system.   The  devices  `rrp0'  and
`rrp3'  are the `raw' versions of the disks.  Also, `mt0' is
tape drive 0, at 800 BPI; `rmt0' is the raw tape,  on  which
large  records  can be read and written; `nrmt0' is raw tape
with the quirk that it does not rewind on close, which is  a
subterfuge that permits multifile tapes to be handled.

     The next thing to do is to extract the rest of the data
from  the  tape.   Comments  are enclosed in ( ); don't type
these.  The number in the first command is the size  of  the
file system; it differs between RP03, RP04/5, and RP06.

                     September 22, 1988

                           - 5 -

        /etc/mkfs /dev/rp3 74000        (153406 if on RP04/5, 322278 on RP06)
        (The above command takes about 2-3 minutes on an RP03)
        dd if=/dev/nrmt0 of=/dev/null bs=20b files=6    (skip 6 files on the tape)
        restor rf /dev/rmt0 /dev/rp3    (restore the file system)
        (Reply with a `return' (CR) to the `Last chance' message)
        (The restor takes about 20-30 minutes)

All of the data on the tape has been extracted.

     You may at this point  mount  the  source  file  system
(mount(1)). To do this type the following:

        /etc/mount /dev/rp3 /usr

The source and manual pages are now available  in  subdirec-
tories of /usr.

     The above mount command is only needed if you intend to
play  around  with source on a single user system, which you
are going to do next.  The file system is mounted  automati-
cally  when  multi-user mode is entered, by a command in the
file /etc/rc. (See `Disk Layout' below).

     Before anything further is done the bootstrap block  on
the  disk (block 0) should be filled in.  This is done using
the command

        dd if=/usr/mdec/rpuboot of=/dev/rp0 count=1

if you have the RP03, or

        dd if=/usr/mdec/hpuboot of=/dev/rp0 count=1

if you have an RP04/5/6.  Now the DEC  disk  bootstraps  are
usable.  See Boot Procedures(8) for further information.

     Before UNIX is turned up completely, a  few  configura-
tion  dependent exercises must be performed.  At this point,
it would be wise to read  all  of  the  manuals  (especially
`Regenerating  System Software') and to augment this reading
with hand to hand combat.


     The UNIX system running is configured to run  with  the
given  disk  and tape, a console, and no other device.  This
is certainly not the correct configuration.  You  will  have
to correct the configuration table to reflect the true state
of your machine.

     It is wise at this point to know how to  recompile  the
system.   Print  (cat(1))  the  file /usr/sys/conf/makefile.
This file is input to the program `make(1)' which if invoked

                     September 22, 1988

                           - 6 -

with  `make all' will recompile all of the system source and
install it in the correct libraries.

     The program mkconf(1) prepares files  that  describe  a
given  configuration  (See mkconf(1)).  In the /usr/sys/conf
directory, the four files _ x_ yconf were  input  to  mkconf  to
produce  the  four  versions of the system _ x_ yunix.  Pick the
appropriate one, and edit it to add  lines  describing  your
own  configuration.   (Remember  the  console  typewriter is
automatically included; don't count it in the kl  specifica-
tion.) Then run mkconf; it will generate the files l.s (trap
vectors) c.c (configuration  table),  and  mch0.s.   Take  a
careful  look  at l.s to make sure that all the devices that
you have are assembled in the correct interrupt vectors.  If
your  configuration is non-standard, you will have to modify
l.s to fit your configuration.

     There  are  certain  magic  numbers  and  configuration
parameters  imbedded  in various device drivers that you may
want to change.  The device addresses  of  each  device  are
defined  in  each driver.  In case you have any non-standard
device addresses, just change  the  address  and  recompile.
(The device drivers are in the directory /usr/sys/dev.)

     The DC11 driver is set to run 4  lines.   This  can  be
changed in dc.c.

     The DH11 driver is set to handle 3 DH11's with  a  full
complement  of 48 lines.  If you have less, or more, you may
want to edit dh.c.

     The DN11 driver will handle 4 DN's.  Edit dn.c.

     The DU11 driver can only handle a single DU.  This can-
not be easily changed.

     The KL/DL driver is set up to run a single DL11-A,  -B,
or  -C  (the console) and no DL11-E's.  To change this, edit
kl.c to have NKL11 reflect the total  number  of  DL11-ABC's
and  NDL11 to reflect the number of DL11-E's.  So far as the
driver is concerned, the difference between the  devices  is
their address.

     All of the disk and tape  drivers  (rf.c,  rk.c,  rp.c,
tm.c,  tc.c,  hp.c,  ht.c)  are  set  up to run 8 drives and
should not need to be changed.  The big disk  drivers  (rp.c
and  hp.c)  have partition tables in them which you may want
to experiment with.

     After all the corrections have been made, use `make(1)'
to  recompile  the  system (or recompile individually if you
wish: use the makefile as a guide).  If you compiled indivi-
dually, say `make unix' in the directory /usr/sys/conf.  The
final object file (unix) should be moved to  the  root,  and

                     September 22, 1988

                           - 7 -

then  booted to try it out.  It is best to name it /nunix so
as not to destroy the working system until  you're  sure  it
does work.  See Boot Procedures(8) for a discussion of boot-
ing.  Note:  before taking the system down, always (!!) per-
form a sync(1) to force delayed output to the disk.

Special Files

     Next you must put in special files for the new  devices
in  the directory /dev using mknod(1).  Print the configura-
tion file c.c created  above.   This  is  the  major  device
switch of each device class (block and character).  There is
one line for each device configured in  your  system  and  a
null  line  for  place holding for those devices not config-
ured.  The essential  block  special  files  were  installed
above;  for  any  new  devices,  the  major device number is
selected by counting the line  number  (from  zero)  of  the
device's  entry  in the block configuration table.  Thus the
first entry in the table bdevsw would be major device  zero.
This  number  is  also  printed in the table along the right

     The minor device is the drive number,  unit  number  or
partition as described under each device in section 4 of the
manual.  For tapes where the unit is dial selectable, a spe-
cial  file may be made for each possible selection.  You can
also add entries for other disk drives.

     In reality, device names are arbitrary. It  is  usually
convenient  to  have  a  system  for  deriving names, but it
doesn't have to be the one presented above.

     Some further notes on minor  device  numbers.   The  hp
driver uses the 0100 bit of the minor device number to indi-
cate whether or not to interleave a file system across  more
than one physical device. See hp(4) for more detail.  The tm
and ht drivers use the 0200 bit to indicate whether  or  not
to rewind the tape when it is closed. The 0100 bit indicates
the density of the tape on TU16 drives.  By convention, tape
special  files with the 0200 bit on have an `n' prepended to
their name, as in /dev/nmt0 or /dev/nrmt1.  Again, see tm(4)
or ht(4).

     The naming of character devices  is  similar  to  block
devices.  Here the names are even more arbitrary except that
devices meant to be used  for  teletype  access  should  (to
avoid  confusion, no other reason) be named /dev/ttyX, where
X is some string (as in `00' or `library').  The files  con-
sole, mem, kmem, and null are already correctly configured.

     The disk and magtape drivers provide a `raw'  interface
to the device which provides direct transmission between the
user's core and the device and  allows  reading  or  writing
large records.  The raw device counts as a character device,

                     September 22, 1988

                           - 8 -

and should have the name of the corresponding standard block
special  file  with  `r'  prepended.  (The `n' for no rewind
tapes violates this rule.) Thus the raw magtape files  would
be called /dev/rmtX.  These special files should be made.

     When all the special  files  have  been  created,  care
should  be  taken  to  change the access modes (chmod(1)) on
these files to appropriate values (probably 600 or 644).

Floating Point

     UNIX only supports (and really  expects  to  have)  the
FP11-B/C  floating  point  unit.   For machines without this
hardware, there is a user  subroutine  available  that  will
catch illegal instruction traps and interpret floating point
operations.  (See fptrap(3).) To install this subroutine  in
the  library,  change  to  /usr/src/libfpsim and execute the
shell files


The system as delivered does not have this code included  in
any  command, although the operating system adapts automati-
cally to the presence or absence of the FP11.

     Next, a floating-point version of  the  C  compiler  in
/usr/src/cmd/c should be compiled using the commands:

        cd /usr/src/cmd/c
        make fc1
        mv fc1 /lib/fc1

This allows programs with floating  point  constants  to  be
compiled.   To  compile floating point programs use the `-f'
flag to cc(1). This flag ensures  that  the  floating  point
interpreter is loaded with the program and that the floating
point version of `cc' is used.

_ T_ i_ m_ e _ C_ o_ n_ v_ e_ r_ s_ i_ o_ n

     If your machine is not in the Eastern  time  zone,  you
must  edit  (ed(1))  the  file /usr/sys/h/param.h to reflect
your local time.  The manifest `TIMEZONE' should be  changed
to reflect the time d        ifference between local time and GMT in
minutes.  For EST, this is 5*60; for PST it would  be  8*60.
Finally,  there  is  a  `DSTFLAG'  manifest; when it is 1 it
causes the time to shift to Daylight  Savings  automatically
between  the  last  Sundays  in  April and October (or other
algorithms in 1974 and 1975).  Normally this will  not  have
to  be  reset.   When the needed changes are done, recompile
and load the system using make(1) and  install  it.   (As  a
general  rule,  when  a  system  header file         is changed, the
entire system should be recompiled.  As it happens, the only

                     September 22, 1988

                           - 9 -

uses  of  these flags are in /usr/sys/sys/sys4.c, so if this
is all that was changed it alone needs to be recompiled.)

     You   may   also   want   to   look   at    timezone(3)
(/usr/src/libc/gen/timezone.c)  to  see  if the name of your
timezone is in its internal  table.   If  needed,  edit  the
changes  in.   After timezone.c has been edited i        t should be
compiled   and   installed    in    its    library.     (See
/usr/src/libc/(mklib  and compall)) Then you should (at your
leisure) recompile and reinstall all programs  that  use  it
(such as date(1)).

_ D_ i_ s_ k _ L_ a_ y_ o_ u_ t

     If there are to be more file systems mounted than  just
the root and /usr, use mkfs(1) to create any new file system
and put its mounting in the file /etc/rc  (see  init(8)  and
mount(1)).   (You  might  look at /etc/rc anyway to see what
has been provided fo        r you.)

     There are two considerations in deciding how to  adjust
the  arrangement of things on your disks: the most important
is making sure there is adequate space for what is required;
secondarily,  throughput should be maximized.  Swap space is
a critical parameter.  The system as  distributed  has  8778
(hpunix)  or  2000  (rpunix)  blocks  for  swap space.  This
should be large enough so running out of  swap  space  never
occurs.   You may want to change these if local wisdom indi-
cates otherwise        .

     The system as distributed has all of  the  binaries  in
/bin.   Most  of  them  should be moved to /usr/bin, leaving
only the ones  required  for  system  maintenance  (such  as
icheck,  dcheck,  cc, ed, restor, etc.) and the most heavily
used in /bin.  This will speed things up a bit if  you  have
only  one disk, and also free up space on the root file sys-
tem for temporary files. (See below).

     Many common system programs (C, the editor, the  assem-
bler  etc.) create intermediate files in th        e /tmp directory,
so the file system where this is stored also should be  made
large  enough  to accommodate most high-water marks.  If you
leave the root file system as distributed  (except  as  dis-
cussed  above) there should be no problem.  All the programs
that create files in /tmp take care to delete them, but most
are  not  immune  to events like being hung up upon, and can
leave dregs.  The directory  should  be  examined  every  so
often and the old files deleted.

     Exhaustion of user-file spac        e is certain to  occur  now
and   then;   the   only  mechanisms  for  controlling  this
phenomenon are occasional  use  of  du(1),  df(1),  quot(1),
threatening messages of the day, and personal letters.

                     September 22, 1988

                           - 10 -

     The efficiency with which UNIX is able to use  the  CPU
is  largely  dictated by the configuration of disk controll-
ers.  For general time-sharing applications, the best  stra-
tegy  is  to  try  to  split  user file        s, the root directory
(including the /tmp directory) and the swap area among three

     Once you have decided how to  make  best  use  of  your
hardware, the question is how to initialize it.  If you have
the equipment, the best way to move a file system is to dump
it  (dump(1)) to magtape, use mkfs(1) to create the new file
system, and restore (restor(1)) the tape.  If for some  rea-
son  you don't want to use magtape, dump accepts an argument
telling where to put the dump; you might use  ano        ther  disk.
Sometimes  a file system has to be increased in logical size
without copying.  The super-block of the device has  a  word
giving  the  highest  address  which  can be allocated.  For
relatively small increases, this word can be  patched  using
the  debugger (adb(1)) and the free list reconstructed using
icheck(1).  The size should not be increased very greatly by
this  technique,  however,  since  although  the allocatable
space will increase the maximum number  of  files  will  not
(that  is,          the  i-list  size  can't  be changed).  Read and
understand the description given in  file  system(5)  before
playing  around  in  this  way.  You may want to see section
rp(4) for some suggestions on how to lay out the information
on RP disks.

     If you have to merge a file system into another, exist-
ing  one, the best bet is to use tar(1).  If you must shrink
a file system, the best bet is to dump the original and res-
tor  it  onto  the  new filesystem.  However, this might not
work if the i-list on         the smaller filesystem is smaller than
the  maximum  allocated inode on the larger.  If this is the
case, reconstruct the filesystem  from  scratch  on  another
filesystem  (perhaps using tar(1)) and then dump it.  If you
are playing with the root file  system  and  only  have  one
drive  the procedure is more complicated. What you do is the


2.   Dump the current root filesystem (or the  reconstructed
     one) using dump(1).

3.   Bring the system down and mount the         new pack.

4.   Retrieve the WECo distribution tape and perform steps 1
     through 5 at the beginning of this document, substitut-
     ing the desired file system size instead of  5000  when
     asked for `file system size'.

                     September 22, 1988

                           - 11 -

5.   Perform step 6 above up to the point where  the  `tape'
     question  is  asked.  At  this point mount the tape you
     made just a few minutes ago. Continue with step 6 above
     substitu        ting a 0 (zero) for the 5.

_ N_ e_ w _ U_ s_ e_ r_ s

     Install  new  users  by  editing  the   password   file
/etc/passwd (passwd(5)).  This procedure should be done once
multi-user mode is entered (see init(8)).   You'll  have  to
make  a  current  directory for each new user and change its
owner to the newly installed name.  Login as  each  user  to
make  sure the password file is correctly edited.  For exam-

        ed /etc/passwd
        mkdir /usr/joe
        chown joe /usr/joe
        login joe
        ls -la
        login root

This will make a new login entry  for  joe,  who  should  be
encouraged to use passwd(1) to give himself a password.  His
default  current  directory  is  /usr/joe  which  has   been
created.  The delivered password file has the user _ b_ i_ n in it
to be used as a prototype.

_ M_ u_ l_ t_ i_ p_ l_ e _ U_ s_ e_ r_ s

     If UNIX is to support  simultaneous  access  from  more
than just the consol        e terminal, the file /etc/ttys (ttys(5))
has to be edited.  To add a new terminal be sure the  device
is  configured  and  the  special  file exists, then set the
first character of the appropriate line of  /etc/ttys  to  1
(or  add  a  new  line).   Note  that init.c will have to be
recompiled if there are to be more than 100 terminals.  Also
note  that  if  the  special  file is inaccessible when init
tries to create a process for it,  the  system  will  thrash
trying and retrying to open it.

_ F_ i_ l_         e _ S_ y_ s_ t_ e_ m _ H_ e_ a_ l_ t_ h

     Periodically (say every day or so) and always  after  a
crash, you should check all the file systems for consistency
(icheck, dcheck(1)).  It is quite important to execute  sync
(8)  before  rebooting  or taking the machine down.  This is
done automatically every 30 seconds by  the  update  program
(8)  when  a multiple-user system is running, but you should

                     September 22, 1988

                           - 12 -

do it anyway to make         sure.

     Dumping of the file system should  be  done  regularly,
since  once  the  system  is going it is very easy to become
complacent.  Complete and incremental dumps are easily  done
with  dump(1).   Dumping  of  files  by name is best done by
tar(1) but the number of files is somewhat limited.  Finally
if  there are enough drives entire disks can be copied using
cp(1), or preferably with dd(1) using the raw special  files
and an appropriate block size.

_ C_ o_ n_ v_ e_ r_ t_ i_ n_ g _ S_ i_ x_ t_ h         _ E_ d_ i_ t_ i_ o_ n _ F_ i_ l_ e_ s_ y_ s_ t_ e_ m_ s

     The best way to convert file systems from  6th  edition
(V6) to 7th edition (V7) format is to use tar(1). However, a
special version of tar must be prepared to run on  V6.   The
following steps will do this:

1.   change directories to /usr/src/cmd/tar

2.   At the shell prompt respond

             make v6tar

     This will leave an executable binary named `v6tar'.

3.   Mount a scratch tape.

4.   Use tp(1) to put `v6tar' on the scratch tape.        

5.   Bring down V7 and bring up V6.

6.   Use tp (on V6) to read in `v6tar'. Put it  in  /bin  or
     /usr/bin (or perhaps some other preferred location).

7.   Use v6tar to make tapes of all that you  wish  to  con-
     vert.   You  may  want  to  read  the manual section on
     tar(1) to see whether you want to use blocking or  not.
     Try  to  avoid  using  full  pathnames  when making the
     tapes. This will simplify moving the hierarchy to  some
     other place on V7 if desired. For example

                     chdir /usr/ken
             v6tar c .

     is preferable to

             v6tar c /usr/ken

8.   After all of the desired tapes are made, bring down  V6
     and  reboot  V7.  Use  tar(1) to read in the tapes just

                     September 22, 1988

                           - 13 -

_ O_ d_ d_ s _ a_ n_ d _ E_ n_ d_ s

     The programs dump, icheck, quot, dcheck, ncheck, and df
(source  in  /usr/source/cmd)  should  be changed to reflect
your default mounted file system devices.  Print  the  first
few lines of these programs and the changes will be obvious.
Tar should be changed to reflect your desired  default  tape

                                        Good Luck

                                        Charles B. Haley
                                        Dennis M. Ritchie

                     September 22, 1988