
     INSTALL(1)                                             INSTALL(1)

     NAME
          install - notes about Plan 9 from User Space installation

     SYNOPSIS
          cd /usr/local/plan9; ./INSTALL [ -b | -c ]

     DESCRIPTION
          To obtain the Plan 9 tree, use CVS (see cvs(1)) or download
          a tar file from http://swtch.com/plan9port.

          The tree can be unpacked anywhere, but the usual place is
          /usr/local/plan9.  In the root of the tree, run ./INSTALL.
          This script builds the Plan 9 build program mk(1) if neces-
          sary, cleans all previously built object files and libraries
          out of the tree, rebuilds and installs everything, and then
          cleans up.

          There are a few files in tree which have the root hard-coded
          in them.  After the build, INSTALL edits these files to
          replace the string /usr/local/plan9 with the name of the
          root of the current tree.

          Finally, INSTALL builds an HTML version of the manual and
          installs it in /usr/local/plan9/man.

          The installation can be thought of as two steps: build all
          the binaries, and then edit files as necessary to fix the
          references to the installation root.  If necessary, these
          can be run separately.  Given the -b flag, INSTALL performs
          only the first step.  Given the -c flag, INSTALL performs
          only the second step.  The first step can be done with the
          tree in a temporary work directory, but the second step must
          be done once the tree is in its final location.  These flags
          are only necessary when trying to conform to the expecta-
          tions of certain package management systems.

          At the end of the installation, INSTALL prints suggested
          settings for the environment variables $PLAN9 and $PATH.

          Plan 9 from User Space uses different threading implementa-
          tions on Linux 2.6 and later kernels than on 2.4 and ear-
          lier; and on FreeBSD 5 and later kernels than on FreeBSD 4
          and earlier.  Running binaries from one class on another
          will not work.

          Some Linux 2.6 systems (e.g., Gentoo) do not use the new
          NPTL pthread library even though the kernel supports them.
          On these systems, plan9port must fall back on the threading
          code intended for Linux 2.4.  To accomplish this, INSTALL
          checks whether the running system uses NPTL and sets
          SYSVERSION in /usr/local/plan9/config accordingly.  The file
          /usr/local/plan9/LOCAL.config is appended to config after
          this auto-detection and can be used to override the choices.
          If LOCAL.config contains a line WSYSTYPE=nowsys then the
          system is built without using X11.

          On most Linux systems, the X11 header packages need to be
          installed to build using X11.  On Debian. the required pack-
          ages are libx11-dev, libxext-dev, and libxt-dev.  On Ubuntu,
          it suffices to install xorg-dev.

          INSTALL can safely be repeated to rebuild the system from
          scratch.

          Once the system is built for the first time, it can be main-
          tained and rebuilt using mk(1). To rebuild individual com-
          mands or libraries, run mk install and mk clean in the
          appropriate source directory (see src(1)).

     FILES
          /usr/local/plan9/lib/moveplan9.files
               the list of files that need to have /usr/local/plan9
               edited out of them

          /usr/local/plan9/lib/moveplan9.sh
               the script that edits the files

          /usr/local/plan9/src/mkmk.sh
               the shell script used to build mk(1)

          /usr/local/plan9/dist/manweb
               the shell script that builds the HTML manual

          /usr/local/plan9/man/index.html
               the top-level page in the HTML version of the manual

          /usr/local/plan9/install.log
               logged output from the last run of INSTALL

          /usr/local/plan9/install.sum
               a summary of install.log

     SEE ALSO
          intro(1), cvs(1)

