summaryrefslogtreecommitdiff
path: root/doc/install.ms
diff options
context:
space:
mode:
Diffstat (limited to 'doc/install.ms')
-rw-r--r--doc/install.ms1423
1 files changed, 1423 insertions, 0 deletions
diff --git a/doc/install.ms b/doc/install.ms
new file mode 100644
index 00000000..cdec392b
--- /dev/null
+++ b/doc/install.ms
@@ -0,0 +1,1423 @@
+.de EX
+.nr x \\$1v
+\\!h0c n \\nx 0
+..
+.de FG \" start figure caption: .FG filename.ps verticalsize
+.KF
+.BP \\$1 \\$2
+.sp .5v
+.EX \\$2v
+.ps -1
+.vs -1
+..
+.de fg \" end figure caption (yes, it is clumsy)
+.ps
+.vs
+.br
+\l'1i'
+.KE
+..
+\" step numbers
+.nr ,s 0 1
+.af ,s a
+.am NH
+.nr ,s 0 1
+..
+.de Sn \" .Sn "step"
+•\ Step \\n(H1\\n+(,s: \\$1
+..
+.de Ss
+.P1
+.B
+.Sn "\\$1"
+.P2
+..
+.TL
+Installing the Inferno Software
+.AU
+Vita Nuova
+.br
+support@vitanuova.com
+.br
+12 June 2003
+.SP 4
+.LP
+Inferno can run as either a native operating system, in the usual way, or as a
+.I hosted
+virtual operating system,
+running as an application on another operating system.
+This paper explains how to install Inferno from the distribution media
+to a hosted environment and how to configure the system for
+basic networking.
+.LP
+Inferno can run as a hosted virtual operating system on top of
+Plan 9, Unix or Windows.
+In this paper, the term
+.I Unix
+is used to cover all supported variants, currently FreeBSD, Linux, HP/UX, Irix and Solaris,
+and the term
+.I Windows
+covers Microsoft Windows (98, Me, Nt, 2000, and XP).
+(Windows 98 might first require installation of the Unicode layer update from Microsoft.)
+.NH
+Preparation
+.LP
+You should ensure at least 150 Mbytes of free space on the filesystem.
+The installation program will copy files from the distribution CD to a
+directory on the filesystem called the
+.I inferno_root
+directory.
+You can choose the location of this directory.
+If you are installing to a multiuser filesystem outside your control a subdirectory of your home
+directory might be most sensible. If you plan to share the Inferno
+system with other users then common choices for
+.I inferno_root
+are
+.CW /usr/inferno
+on Unix and Plan 9 systems, and
+.CW c:\einferno
+on Windows systems.
+Where these appear in examples in this paper you should substitute
+your own
+.I inferno_root
+directory.
+.Ss "Choose the \fIinferno_root\fP directory."
+Ensure that the user who will run the installation program has
+appropriate filesystem permissions to create the
+.I inferno_root
+directory and
+files and subdirectories beneath it.
+.NH
+Copying Files
+.LP
+On all platforms the files will be owned by the user doing the installation,
+except for installation onto a FAT file system (eg, on Windows), where the files
+appear to be owned by
+.CW Everyone
+because FAT does not record ownership.
+.Ss "Insert the distribution CD into the CD drive."
+On Unix and Plan 9,
+mount the CD to a suitable location on the filesystem, call this location
+.I cd_path .
+On Windows, note the drive letter of the CD, call this drive letter
+.I cd_drive .
+The files will be copied by an Inferno hosted installation program which runs
+directly from the CD.
+The directory
+.CW /install
+on the CD contains an installation program for each supported platform \- a shell
+script for Unix and Plan 9 and an executable for Windows.
+The Plan 9 install script is called
+.CW Plan9.rc
+and determines the CPU type from the environment variable
+.CW cputype .
+The Unix install scripts all have names of the form
+.CW \fIhost_os\fP-\fIhost_arch\fP.sh
+where
+.I host_os
+will be one of:
+.CW FreeBSD ,
+.CW Linux ,
+or
+.CW Solaris
+and
+.I host_arch
+will be one of:
+.CW 386 ,
+.CW mips ,
+.CW power
+or
+.CW sparc .
+Most platforms offer just the one obvious combination.
+The Windows installation program is called
+.CW setup.exe ;
+it is used on all varieties of Windows.
+The next step describes how to begin the installation by running the program
+that corresponds to your host system.
+.Ss "Run the installation script."
+The installation program will copy files from the CD to the filesystem.
+The Windows installation program will also create registry entries and add
+an Inferno item to the Windows
+.I start
+menu.
+On Plan 9, run
+.P1
+rc \fIcd_path\fP/install/Plan9.rc \fIinferno_root\fP
+.P2
+Where
+.I inferno_root
+is the path to the chosen Inferno root directory. The CPU architecture
+will be inferred from the environment variable
+.CW cputype .
+On Unix, run
+.P1
+sh \fIcd_path\fP/install/\fIhost-os\fP-\fIhost_arch\fP.sh \fIinferno_root\fP
+.P2
+Where
+.I host_os
+is the Unix variant name
+.CW FreeBSD , (
+.CW Irix ,
+.CW Linux
+or
+.CW Solaris ).
+.I host_arch
+is the CPU type (eg,
+.CW 386 ),
+and
+.I inferno_root
+is the path to the chosen Inferno directory.
+On Windows, run
+.P1
+\fIcd_drive\f(CW:\einstall\esetup.exe
+.P2
+The Windows installation program will ask you to choose the location of the installation
+directory on the hard disk.
+.LP
+On all platforms, a copy of Inferno
+on the CD will install from various installation packages on the CD to the
+.I inferno_root
+subtree on the filesystem.
+On any platform it installs support for all.
+.LP
+Inferno is now installed, but it needs to be configured
+for your site.
+The process acts as a quick tour of parts of the system.
+The main tasks are to add local parameters to the network data base,
+and to set up the authentication system.
+If you are going to run Inferno standalone, for instance to experiment with Limbo
+and the file serving interface,
+most of what follows can be deferred indefinitely.
+It is still worthwhile skimming through it, because the first few sections tell how
+to start up Inferno with correct parameters (eg, root directory and graphics resolution).
+(A configuration program that runs under the window system would be more convenient,
+and fairly easy to do, but that has not yet been done.)
+.NH
+Running Inferno
+.LP
+Inferno host executables are all kept in a single directory corresponding
+to the combination of host operating system and CPU architecture \- the Inferno
+.CW bin
+directory.
+.P1
+\fIinferno_root\fP/\fIhost_os\fP/\fIhost_arch\fP/bin
+.P2
+(On Windows the path might need
+.CW \e
+not
+.CW /
+of course.)
+That directory can be added to the search path of the host system's command interpreter,
+and that process will be described first, although as discussed later one can use a script
+instead and that is sometimes more convenient.
+(Of course, the script will still need to refer to that directory.)
+.LP
+.I "Plan 9:\ \ "
+Plan 9 users should add a line to their
+.CW lib/profile
+file that binds this directory after their
+.CW /bin
+directory.
+.P1
+bind -a /usr/inferno/Plan9/$cputype/bin /bin
+.P2
+The bind is done after the existing
+.I bin
+directory to avoid hiding the existing Plan 9 compilers.
+If, at a later stage, you build either the hosted or native Inferno kernels for ARM or StrongARM
+you should ensure that the Inferno compilers are used rather than
+the Plan 9 compilers, since they differ in the implementation of
+floating-point instructions (the Plan 9 ARM suite uses a byte order that is more plausible
+than the order ARM dictates but therefore wrong).
+That difference is likely to be resolved at some point but it has not yet been done.
+.LP
+.I "Windows:\ \"
+The
+.I host_os
+is always
+.CW Nt
+(even for Windows 98, 2000 or XP)
+and
+.I host_arch
+is always
+.CW 386
+and the installation program will create an entry on the
+.I "start menu"
+to invoke Inferno.
+For Unix systems or Windows systems in which Inferno will be started
+from a command shell, the environment variable
+.CW PATH
+should be set to include the Inferno
+.CW bin
+directory.
+For Windows 95 and Windows 98 this should be done in the
+.CW \eautoexec.bat
+file by adding a line like
+.P1
+PATH=c:\einferno\eNt\e386\ebin;%PATH%
+.P2
+You will need to reboot Windows to have the system reread the
+.CW \eautoexec.bat
+file.
+For Windows NT and Windows 2000 modify the
+.CW Path
+environment variable through
+.I "Control Panel -> System -> Environment" .
+.LP
+If you are using an MKS or Cygwin Unix-like shell environment,
+you might instead set:
+.P1
+PATH="c:/inferno/Nt/386/bin;$PATH"
+.P2
+and export it if necessary.
+.LP
+.I "Unix:\ \"
+For Unix systems, for
+.CW sh
+derivatives, the environment variable
+.CW PATH
+should be set to include the Inferno
+.CW bin
+directory.
+This might be done in your
+.CW .profile
+file by adding a line like
+.P1
+PATH="/usr/inferno/Linux/386/bin:$PATH"
+.P2
+Don't forget to ensure that
+.CW PATH
+is exported.
+You may need to log out and back in again for the changes to take effect.
+.KS
+.Ss "Start Inferno."
+Hosted inferno is run by invoking an executable called
+.I emu .
+.KE
+On Windows, select the Inferno option from the
+.I "start menu" .
+This will invoke
+.I emu
+with appropriate arguments to find its files in
+.I inferno_root .
+If you need to change any of the options passed to
+.I emu
+when invoked from the
+.I "start menu"
+you need to do this by clicking the right mouse button
+on the Windows task bar and choosing
+.I "Properties -> Start Menu Programs -> Advanced"
+to modify the shortcut used for Inferno.
+For Unix and Plan 9, you will need to tell
+.I emu
+where to find the Inferno file tree by passing it the
+.CW -r\fIrootpath\f(CW
+command line option. For example
+.P1
+emu -r/usr/john/inferno
+.P2
+Without the
+.CW -r
+option it will look for the file tree in
+.CW /usr/inferno
+on Plan 9 and Unix and, when invoked from the command line on WIndows,
+the default is
+.CW \einferno
+on the current drive.
+(The Windows start menu by contrast has already been set to use the right directory by the installation software.)
+.LP
+When using graphics,
+.I emu
+will use a window with a resolution of 640 x 480 pixels by default. To use a larger resolution
+you will need to pass
+.I emu
+an option
+.CW -g\fIXsize\f(CWx\fIYsize\f(CW
+on the command line. So, for example, to invoke
+.I emu
+as above but with a resolution of 1024 x 768 pixels the full command line
+would be
+.P1
+emu -r/usr/john/inferno -g1024x768
+.P2
+When invoked in this way
+.I emu
+displays a command window running the Inferno shell
+.CW /dis/sh.dis .
+To avoid typing the command line options each time you invoke
+.I emu
+you can store them in the environment variable
+.CW EMU
+which is interrogated when
+.I emu
+is started and might as well be set along side the
+.CW PATH
+environment variable if the same configuration options are to be used on
+each invocation.
+.P1
+set EMU="-rd:\eDocuments and Settings\ejohn\einferno -g1024x768"
+.P2
+for Windows.
+.P1
+EMU=(-r/usr/john/inferno -g1024x768)
+.P2
+for Plan 9, and
+.P1
+EMU="-r/usr/john/inferno -g1024x768"
+.P2
+for Unix.
+An alternative to using the
+.CW EMU
+environment variable is to place the correct invocation in a
+script file (or batch file, for Windows) and invoke that instead
+of running
+.I emu
+directly.
+It is important to note that for Windows the
+.CW -r
+option also serves to indicate both the drive and directory on to which the software
+has been installed. Without a drive letter the system will assume the
+current drive and will fail if the user changes to an alternative drive.
+Once the environment variables or scripts are set up, as described above, invoking plain
+.P1
+emu
+.P2
+or the appropriate script file,
+should result in it starting up Inferno's command interpreter
+.I sh (1),
+which prompts with a semicolon:
+.P1
+;
+.P2
+You can add a further option
+.CW -c1
+to start up
+.I emu
+in a
+mode in which the system compiles a module's
+Dis operations to native machine instructions when a module
+is loaded.
+(See the
+.I emu (1)
+manual page.)
+In
+.I compile
+mode programs that do significant computation will run much faster.
+Whether in compiled or interpreted mode you should now have a functional
+hosted Inferno system.
+When Inferno starts the initial
+.CW /dis/sh.dis
+it reads commands from the file
+.CW /lib/sh/profile
+before becoming interactive. See the manual pages for the shell
+.I sh (1)
+to learn more about tailoring the initial environment.
+.LP
+The semicolon is the default shell prompt. From this command window
+you should be able to see the installed Inferno files and directories
+.P1
+lc /
+.P2
+The command
+.I lc
+presents the contents of its directory argument in columnar fashion to standard
+output in the command window.
+.P1
+; lc /
+FreeBSD/ Unixware/ icons/ libkern/ man/ prof/
+Hp/ acme/ include/ libkeyring/ mkconfig prog/
+Inferno/ appl/ keydb/ libmath/ mkfile services/
+Irix/ asm/ legal/ libmemdraw/ mkfiles/ tmp/
+LICENCE chan/ lib/ libmemlayer/ mnt/ tools/
+Linux/ dev/ lib9/ libtk/ module/ usr/
+MacOSX/ dis/ libbio/ licencedb/ n/ utils/
+NOTICE doc/ libcrypt/ limbo/ net/ wrap/
+Nt/ emu/ libdraw/ locale/ nvfs/
+Plan9/ env/ libfreetype/ mail/ o/
+Solaris/ fonts/ libinterp/ makemk.sh os/
+;
+.P2
+Only the files and directories in and below the
+.I inferno_root
+directory on the host filesystem are immediately visible to an Inferno process;
+these files are made visible in the root of the Inferno file namespace.
+If you wish to import or export files
+from and to the host filesystem you will need to use tools on your
+host to move them in or out of the Inferno visible portion of your host
+filesystem (see the manual pages
+.I os (1)
+and
+.I cmd (3)
+for an interface to host commands).
+(We plan to make such access direct, but the details are still being worked out.)
+From this point onwards in this paper all file paths not qualified with
+.I inferno_root
+are assumed to be in the Inferno namespace.
+Files created in the host filesystem will be created with the user id of
+the user that started
+.I emu
+and on Unix systems with that user's group id.
+.NH
+Setting the site's time zone
+.LP
+Time zone settings are defined by
+files in the directory
+.CW /locale/timezone .
+The setting affects only how the time is displayed; the internal representation does not vary.
+For instance, the file
+.CW /locale/GMT
+defines Greenwich Mean Time,
+.CW /locale/GB-Eire
+defines time zones for Great Britain and the Irish Republic
+(GMT and British Summer Time), and
+.CW /locale/US_Eastern
+defines United States
+Eastern Standard Time and Eastern Daylight Time.
+The time zone settings used by applications are read
+(by
+.I daytime (2))
+from the file
+.CW /locale/timezone ,
+which is initially a copy of
+.CW /locale/GB-Eire .
+If displaying time as the time in London is adequate, you need change nothing.
+To set a different time zone for the whole site,
+copy the appropriate time zone file into
+.CW /locale/timezone :
+.P1
+cp /locale/US_Eastern /locale/timezone
+.P2
+To set a different time zone for a user or window,
+.I bind (1)
+the file containing the time zone setting over
+.CW /locale/timezone ,
+either in the user's profile or in a name space description file:
+.P1
+bind /locale/US_Eastern /locale/timezone
+.P2
+.NH
+Running the
+Window Manager
+.I wm
+.LP
+Graphical Inferno programs normally run under the window manager
+.I wm (1).
+Inferno has a simple editor,
+.I wm/edit ,
+that can be used to edit the inferno configuration files.
+The `power environment' for editing and program development is
+.I acme (1),
+but rather that throwing you in at the deep end, we shall stick to
+the simpler one for now.
+If you already know Acme from
+Plan 9, however, or perhaps Wily from Unix, feel free to use Inferno's
+.I acme
+instead of
+.I edit .
+.Ss "Start the window manager."
+Invoke
+.I wm
+by typing
+.P1
+wm/wm
+.P2
+You should see a new window open with a blue-grey background and a small
+.I "Vita Nuova"
+logo in the bottom left hand corner. Click on the logo with mouse button 1
+to reveal a small menu.
+Selecting the
+.I Edit
+entry will start
+.I wm/edit .
+In common with most
+.I wm
+programs the editor has three small buttons in a line at its top right hand corner.
+Clicking on the X button, the rightmost button,
+will close the program down. The leftmost of the three buttons will allow the window
+to be resized \- after clicking it drag the window from a point near to either one of its
+edges or one of its corners. The middle button will minimise the window, creating
+an entry for it in the application bar along the bottom of the main
+.I wm
+window. You can restore a minimised window by clicking on its entry in the application bar.
+The initial
+.I wm
+configuration is determined by the contents of the shell
+script
+.CW /lib/wmsetup
+(see
+.I toolbar (1)
+and
+.I sh (1)).
+.Ss "Open a shell window."
+Choose the
+.I shell
+option from the menu to open up a shell window. The configuration of Inferno
+will be done from this shell window.
+.NH
+Manual Pages
+.LP
+Manual pages for all of the system commands are available from a shell
+window. Use the
+.I man
+or
+.I wm/man
+commands. For example,
+.P1
+man wm
+.P2
+will give information about
+.I wm .
+And
+.P1
+man man
+.P2
+will give information about using
+.I man .
+.I Wm/man
+makes use of the Tk text widget to produce slightly more
+attractive output than the plain command
+.I man .
+Here, and in other Inferno documentation you will see references to manual page
+entries of the form \fIcommand\f(CW(\fIsection\f(CW)\fR.
+You can display the manual page for the command by running
+.P1
+man \fIcommand\fP
+.P2
+or
+.P1
+man \fIsection\fP \fIcommand\fP
+.P2
+if the manual page appears in more than one section.
+.NH
+Initial Namespace
+.LP
+The initial Inferno namespace is built
+by placing the root device '#/' (see
+.I root (3))
+at the root of the namespace and binding
+.nr ,i 0 1
+.af ,i i
+.IP \n+(,i)
+the host filesystem device '#U' (see
+.I fs (3))
+containing the
+.I inferno_root
+subtree of the host filesystem at the root of the Inferno filesystem,
+.IP \n+(,i)
+the console device '#c' (see
+.I cons (3))
+in
+.CW /dev ,
+.IP \n+(,i)
+the prog device '#p' (see
+.I prog (3))
+onto
+.CW /prog ,
+.IP \n+(,i)
+the IP device '#I' (see
+.I ip (3))
+in
+.CW /net ,
+and
+.IP \n+(,i)
+the environment device '#e' (see
+.I env (3))
+at
+.CW /dev/env .
+.rr ,i
+.LP
+You can see the sequence of commands required to construct the current namespace
+by running
+.P1
+ns
+.P2
+.NH
+Inferno's network
+.LP
+If you are just going to use Inferno for local Limbo programming, and not use its
+networking interface, you can skip to the section ``Adding new users'' at the end of this document.
+You can always come back to this step later.
+.LP
+To use IP networking, the IP device
+.I ip (3)) (
+must have been bound into
+.CW /net .
+Typing
+.P1
+ls -l /net
+.P2
+(see
+.I ls (1))
+should result in something like
+.P1
+--rw-rw-r-- I 0 network john 0 May 31 07:11 /net/arp
+--rw-rw-r-- I 0 network john 0 May 31 07:11 /net/ndb
+d-r-xr-xr-x I 0 network john 0 May 31 07:11 /net/tcp
+d-r-xr-xr-x I 0 network john 0 May 31 07:11 /net/udp
+.P2
+There might be many more names on some systems.
+.LP
+A system running Inferno, whether native or hosted, can by agreement attach to any or all resources that
+are in the name space of another Inferno system (or even its own).
+That requires:
+.IP •
+the importing system must know where to find them
+.IP •
+the exporting system must agree to export them
+.IP •
+the two systems must authenticate the access (not all resources will be permitted to all systems or users)
+.IP •
+the conversation can be encrypted to keep it safe from prying eyes and interference
+.LP
+On an Inferno network, there is usually one secure machine that acts as authentication server.
+All other systems variously play the rôles of server and client as required: any system can import some resources (or none)
+and export others (or none), simultaneously, and differently in different name spaces.
+In following sections, we shall write as though there were three distinct machines:
+authentication server (signer); server (exporting resources); and client (importing resources).
+With Inferno, you can achieve a similar effect on a single machine by starting up distinct
+instances of
+.I emu
+instead.
+That is the easiest way to become familiar with the process (and also avoids having to install
+the system on several machines to start).
+It is still worthwhile setting up a secured
+authentication server later, especially if you are using Windows on a FAT file system
+where the host system's file protections are limited.
+.LP
+We shall now configure Inferno to allow each of the functions listed above:
+.IP •
+change the network database to tell where to find local network resources
+.IP •
+set up the authentication system, specifically the authentication server or `signer'
+.IP •
+start network services (two distinct sets: one for the authentication services and the other for
+all other network services)
+.NH
+Network database files
+.LP
+In both hosted and native modes, Inferno uses a collection of text files
+of a particular form to store all details of network and service configuration.
+When running hosted, Inferno typically gets most of its data from the host operating system,
+and the database contains mainly Inferno-specific data.
+.LP
+The file
+.CW /lib/ndb/local
+is the root of the collection of network database files.
+The format is defined by
+.I ndb (6),
+but essentially it is a collection of groups of attribute/value pairs of the form
+\fIattribute\fP\f(CW=\fP\fIvalue\fP.
+Attribute names and most values are case-sensitive.
+.LP
+Related attribute/value pairs are grouped into database `entries'.
+An entry can span one or more
+lines: the first line starts with a non-blank character,
+and any subsequent lines in that entry start
+with white space (blank or tab).
+.NH 2
+Site parameters
+.LP
+The version of
+.CW /lib/ndb/local
+at time of writing looks like this:
+.P1
+database=
+ file=/lib/ndb/local
+ file=/lib/ndb/dns
+ file=/lib/ndb/inferno
+ file=/lib/ndb/common
+
+infernosite=
+ #dnsdomain=your.domain.com
+ #dns=1.2.3.4 # resolver
+ SIGNER=your_Inferno_signer_here
+ FILESERVER=your_Inferno_fileserver_here
+ smtp=your_smtpserver_here
+ pop3=your_pop3server_here
+ registry=your_registry_server
+.P2
+The individual files forming the data base are listed in order in the
+.CW database
+entry.
+They can be ignored for the moment.
+The entry labelled
+.CW infernosite=
+defines a mapping from symbolic host names of the form
+.CW $\fIservice\f(CW
+to a host name, domain name, or a numeric Internet address.
+For instance, an application that needs an authentication service
+will refer to
+.CW $SIGNER
+and an Inferno naming service will translate that at run-time to the appropriate network name for
+that environment.
+Consequently,
+the entries above need to be customised for a given site.
+(The items that are commented out are not needed when the host's own DNS resolver is used instead
+of Inferno's own
+.I dns (8).)
+For example, our
+.CW infernosite
+entry in the
+.CW local
+file might look something like this
+.P1
+infernosite=
+ dnsdomain=vitanuova.com
+ dns=200.1.1.11 # resolver
+ SIGNER=doppio
+ FILESERVER=doppio
+ smtp=doppio
+ pop3=doppio
+ registry=doppio
+.P2
+where
+.CW doppio
+is the host name of a machine that is offering the given services to Inferno,
+and
+.CW 200.1.1.11
+is the Internet address of a local DNS resolver.
+.Ss "Enter defaults for your site"
+.LP
+The only important names initially are:
+.IP \f(CWSIGNER\fP 20
+the host or domain name, or address of the machine that will act as signer
+.IP \f(CWregistry\fP
+the name or address of a machine that provides the local dynamic service
+.I registry (4)
+.IP \f(CWFILESERVER\fP
+the primary file server (actually needed only by clients with no storage of their own)
+.LP
+All others are used by specific applications such as
+.I acme (1)
+mail or
+.I ftpfs (4).
+.LP
+If you are using a single machine for signer and server/client, put its name in those three entries.
+.NH 2
+Connection server
+.I cs (8)
+and name translation
+.LP
+The connection server
+.I cs (8)
+uses the network database
+and other
+data (such as that provided by the host system and
+the Internet DNS servers) to translate symbolic network names and services into instructions
+for connecting to a given service.
+In hosted mode,
+network and service names are passed through to the host for conversion to numeric IP
+addresses and port numbers. If the host is unable to convert a service name
+the connection server will attempt to convert the name using mappings
+of service and protocol names to Internet port numbers
+in the file
+.CW /lib/ndb/inferno :
+.P1
+tcp=infgamelogin port=6660 # inferno games login service
+tcp=styx port=6666 # main file service
+tcp=mpeg port=6667 # mpeg stream
+tcp=rstyx port=6668 # remote invocation
+tcp=infdb port=6669 # database server
+tcp=infweb port=6670 # inferno web server
+tcp=infsigner port=6671 # inferno signing services
+tcp=infcsigner port=6672 # inferno countersigner
+tcp=inflogin port=6673 # inferno credential service
+tcp=infsds port=6674 # software download
+tcp=registry port=6675 # registry(4)
+udp=virgil port=2202 # naming service
+.P2
+For the moment, leave that file as it is.
+You will only need to modify this file if in future
+you add new statically-configured services to Inferno.
+(Services that come and go dynamically might use
+.I registry (4)
+instead, a registry manager that allows a service to be found
+using a description of it.)
+.NH
+Configuring a Signer
+.LP
+Before an Inferno machine can authenticate establish a secure connection to an Inferno
+service on another machine, each system needs to obtain a certificate from a common signer.†
+We talk here as though there is only one `signer' per site but in fact there can be application- or
+group-specific ones.
+For instance, a version of the Inferno games server automatically starts its own signing service to
+keep the identities and keys used for game service separate from those of the primary
+system, allowing users to set up their own gaming groups without fuss.
+.FS
+.FA
+†The authentication system will shortly expand to a rôle-based one allowing a chain of certificates to be used,
+from several signers, with delegation etc.
+.FE
+To use authenticated connections for the primary
+file services we need to set up a signer to generate
+certificates for users (see
+.I createsignerkey (8)
+and
+.I logind (8)).
+.LP
+Choose an Inferno machine to become the signer.
+If this is the first or only
+Inferno machine on your network then make this machine the signer.
+(It is more realistic if you start up a separate copy of
+.I emu
+and leave it in `console' mode without starting the window system.)
+You can always move the function elsewhere later.
+.Ss "Empty the secret file of secrets."
+The authentication server verifies a user's identity by checking that the user knows a shared secret.
+(In fact the secret is not used directly, but instead a scrambled value that was derived from it.)
+The file
+.CW /keydb/keys
+holds those secrets; it is encrypted using a secret password or phrase known only to the
+manager of the authentication server.
+Having just installed Inferno, the file
+should exist and be readable only by you (or the user as which the authentication service will run).
+On the signer machine, type
+.P1
+ls -l /keydb/keys
+.P2
+You should see something like:
+.P1
+--rw------- M 7772 yourname inf 0 Jun 12 03:08 /keydb/keys
+.P2
+You should see something like the above.
+If the file does not exist or is not empty or has the wrong mode, use:
+.P1
+cp /dev/null /keydb/keys; chmod 600 /keydb/keys
+.P2
+to set it right.
+.Ss "Generate a signer key."
+Next on the signer machine, run
+.P1
+auth/createsignerkey \fIname\fP
+.P2
+In place of
+.I name
+enter the network name of the signer. A fully-qualified domain name of a
+host or individual is fine.
+This value will appear as the signer name in each
+certificate generated by the signer.
+.I Createsignerkey
+creates public and private keys that are used by the signer when generating
+certificates.
+They are stored in
+.CW /keydb/signerkey ;
+check that it has permissions that limit access to the user that will run the
+authentication services:
+.P1
+; ls -l /keydb/signerkey
+--rw------- M 32685 secrets inf 1010 Jul 07 2000 /keydb/signerkey
+.P2
+Use
+.I chmod (1)
+to set the mode to read/write only for the owner if necessary:
+.P1
+chmod 600 /keydb/signerkey
+.P2
+.Ss "Start the authentication network services"
+Still at the signer console, type
+.P1
+svc/auth
+.P2
+That script (see
+.I svc (8))
+will check that the
+.CW /keydb/keys
+and
+.CW /keydb/signerkey
+files exist, and then
+start the program
+.I keyfs (4),
+which manages the
+.CW keys
+file.
+It will prompt for the password (pass phrase) you wish to use to protect the
+.CW keys
+file, now and on subsequent runs:
+.P1
+; svc/auth
+Key:
+Confirm key:
+.P2
+It prompts twice to confirm it.
+If successfully confirmed, it will then
+start the
+network services used by Inferno to authenticate local and remote users and hosts.
+(If confirmation fails, retry by running
+.CW svc/auth
+again.)
+.LP
+You can check that they are running by typing:
+.P1
+ps
+.P2
+which should show something like the following:
+.P1
+ 1 1 john release 74K Sh[$Sys]
+ 3 2 john alt 15K Cs
+ 10 9 john recv 25K Keyfs
+ 11 9 john release 44K Styx[$Sys]
+ 12 9 john recv 25K Keyfs
+ 14 1 john alt 8K Listen
+ 16 1 john release 8K Listen[$Sys]
+ 18 1 john alt 9K Listen
+ 20 1 john release 9K Listen[$Sys]
+ 22 1 john alt 9K Listen
+ 24 1 john release 9K Listen[$Sys]
+ 26 1 john alt 8K Listen
+ 28 1 john release 8K Listen[$Sys]
+ 29 1 john ready 73K Ps[$Sys]
+.P2
+There should be
+.CW Keyfs
+and
+.CW Listen
+processes.
+.Ss "Enter user names and secrets."
+For each user to be authenticated by the signer run
+.P1
+auth/changelogin \fIusername\fP
+.P2
+You will be prompted to supply a secret (ie, password or pass phrase) and expiration date.
+The expiration date will be used
+as the maximum expiration date of authentication certificates granted to that user.
+.I Changelogin
+(see
+.I changelogin (8))
+accesses the name space generated by
+.I keyfs (4),
+which has just been started above by
+.CW svc/auth .
+A user can later change the stored secret using the
+.I passwd (1)
+command.
+For the signer to generate a certificate there must be at least one entry in the
+password file.
+If you are not sure at this stage of the names of the users that you want to
+authenticate then create an entry for the user
+.CW inferno
+and yourself.
+.NH
+Establishing a Secure Connection
+.LP
+To establish a secure connection between two Inferno machines, each needs to present a public key with
+a certificate signed by a common signer.
+We shall make two public/private key sets, one for the server and one for a client
+(they differ only in where they are stored).
+We shall do the server first, because the usual network services require
+the server possess some keys before they can start.
+We shall then start those services, and finally sort out the client.
+.Ss "Start the connection service."
+The server still needs to make contact with the signer, so we need to start the basic connection service
+.I cs (8).
+If you are using the same instance of
+.I emu
+in which you invoked
+.CW svc/auth
+above, you should skip this step.
+To check, you should see a new file in the
+.CW /net
+directory called
+.CW cs .
+Run the command
+.P1
+ls /net
+.P2
+You should see at least the following names in the output:
+.P1
+/net/cs
+/net/ndb
+/net/tcp
+/net/udp
+.P2
+Otherwise, type
+.P1
+ndb/cs
+.P2
+That starts
+.I cs (8).
+Try the
+.CW "ls /net"
+again to check that the
+.CW cs
+file has appeared.
+.LP
+.Ss "Generate a server key set."
+On the server machine (or in the `server' window),
+use
+.I getauthinfo (8)
+to obtain a certificate and save it in a file named
+.CW default
+by running
+.P1
+getauthinfo default
+.P2
+.I Getauthinfo
+will prompt for the address of your signer (you can often
+just use its host name or even
+.CW localhost )
+and for a remote username and password
+combination.
+.I Getauthinfo
+will connect to the
+.I inflogin
+service on the signer and authenticate you against its user and password database,
+.CW /keydb/keys ,
+using the username and password that you entered above.
+Answer
+.CW yes
+to the question that asks if you want to save the certificate in a file.
+.I Getauthinfo
+will save a certificate in the file
+.CW /usr/\fIuser\f(CW/keyring/default
+where
+.I user
+is the name in
+.CW /dev/user .
+.NH
+Network Services
+.LP
+As mentioned above, in a full Inferno network
+the authentication services will usually be run on a secured machine of their own (the signer),
+and the ordinary network services such as file service are not run on a signer.
+If you are, however, using one machine for all functions, you can get the right
+effect by starting another instance of
+.I emu ,
+to act as an Inferno host that is not a signer.
+This one will run the services of a primary file server
+and the site
+.I registry (4).
+.LP
+Commands described in
+.I svc (8)
+start listeners for various local network services.
+(The commands are actually shell scripts.)
+As we saw above,
+.CW svc/auth
+starts the services on a signer.
+.LP
+Here we shall start the usual set of services.
+.KS
+.Ss "Start the network listener services."
+Type
+.P1
+svc/net
+.P2
+.KE
+Various network services will (should!) now be running. To confirm this type
+.P1
+ps
+.P2
+which should show something like the following:
+.P1
+; ps
+ 1 1 inferno release 74K Sh[$Sys]
+ 7 6 inferno alt 15K Cs
+ 13 1 inferno recv 15K Registry
+ 14 1 inferno release 44K Styx[$Sys]
+ 15 1 inferno recv 15K Registry
+ 17 1 inferno alt 8K Listen
+ 19 1 inferno release 8K Listen[$Sys]
+ 22 1 inferno alt 8K Listen
+ 24 1 inferno release 8K Listen[$Sys]
+ 25 1 inferno ready 74K Ps[$Sys]
+.P2
+There should be a few
+.CW Listen
+processes and perhaps a
+.CW Registry .
+.LP
+You can also try
+.P1
+netstat
+.P2
+.I Netstat
+prints information about network connections. You should see
+several lines of output, each one describing an announced TCP or UDP service.
+Depending upon the contents of the network configuration files we included on the CD,
+you might see output something like this:
+.P1
+tcp/1 Announced inferno 200.1.1.89!6668 ::!0
+tcp/2 Announced inferno 200.1.1.89!6666 ::!0
+tcp/3 Announced inferno 200.1.1.89!6675 ::!0
+.P2
+Each line corresponds to a network connection:
+the connection name, the name of the user running the server,
+the address of the local end of the connection,
+the address of the remote end of the connection,
+and the connection status.
+The connection name is actually the protocol and conversation directory
+in
+.CW /net .
+The connection addresses are all of the form \fIhost\f(CW!\fIport\fR
+for these IP based services, and the remote addresses are not filled in
+because they all represent listening services that are in the
+.CW Announced
+state.
+In this example the fourth line shows a TCP service listening on port 6673.
+Examining
+.CW /lib/ndb/inferno
+with
+.CW grep
+(see
+.I grep (1))
+shows that the listener on port 6675 is the Inferno registry service
+.P1
+grep 6675 /lib/ndb/inferno
+.P2
+gives
+.P1
+tcp=registry port=6675 # default registry
+.P2
+.LP
+Now the server is ready but we need a client.
+.LP
+Either use a third machine or (more likely at first) simply start another
+.I emu
+instance in a new window.
+Start its connection server, again by typing
+.P1
+ndb/cs
+.P2
+The connection server is fundamental to the Inferno network.
+Once networking is set up, when subsequently starting up
+a client you should start
+.I cs
+before starting the window system.
+Note that if you are running the Inferno instance as a server, or combined
+server and client,
+the
+.CW svc/net
+that starts the network services
+automatically starts
+.I cs ,
+and you need not do so explicitly.
+.LP
+.Ss "Generate a client certificate."
+Obtain a certificate for the client in the same way as on the server.
+We shall obtain a certificate for use with a specific server
+by storing
+it in a file whose name exactly matches the network address of the server
+.P1
+getauthinfo tcp!\fIhostname\fP
+.P2
+Use the current machine's
+.I hostname .
+.I Getauthinfo
+stores the certificate in the file
+.CW /usr/\fIuser\fP/keyring/\fIkeyname\fP
+where
+.I user
+is the name in
+.CW /dev/user
+and
+.I keyname
+is the argument given to
+.I getauthinfo .
+Again,
+answer
+.CW yes
+to the question that asks if you want to save the certificate in a file.
+.LP
+Now that both client and server have a certificate obtained from the same signer
+it is possible to establish a secure connection between them.
+Note that getting keys and certificates with
+.I getauthinfo
+is normally done just once (or at most once per server when the
+.CW default
+key is not used).
+In short, all the work done up to now need not be repeated.
+After this, provided the keys were saved to a keyring file,
+as many authenticated connections can be made as desired
+until the certificate expires (which by default is whenever the password entry
+was set to expire).
+Also note that the certificates for different machines can have
+different signers, and one can even use different certificates for the same machine
+when the remote user name is to differ
+(the
+.CW -f
+option of
+.I getauthinfo
+can then be useful to force an appropriate keyring name).
+.Ss "Make an authenticated connection."
+The script
+.CW svc/net
+on the server started fundamental name services and also a Styx file service.
+That can also be started separately using
+.CW svc/styx .
+In either case the namespace that is served
+is the one in which the command was invoked.
+Now you can test the service.
+.LP
+Confirm that
+.CW /n/remote
+is an empty directory by typing
+.P1
+lc /n/remote
+.P2
+You can now mount the server's name space
+onto the client's directory
+.CW /n/remote
+by typing
+.P1
+mount \fIserveraddr\fP /n/remote
+.P2
+Where
+.I serveraddr
+is the IP address of the server or a name that the host can resolve to the
+IP address of the server.
+Now
+.P1
+lc /n/remote
+.P2
+should reveal the files and directories in the namespace being served by the server.
+Those files are now also visible in the namespace of your shell.
+You will notice that these changes only affect the shell in which you ran the
+.I mount
+command \- other windows are unaffected.
+You can create, remove or modify files and directories in and under
+.CW /n/remote
+much as you can any other file or directory in your namespace.
+In fact, in general, a process does not need to know whether a file
+actually resides locally or remotely.
+You can unmount the mounted directory with
+.I unmount .
+Type
+.P1
+unmount /n/remote
+.P2
+You can confirm that it has gone by running
+.P1
+ls /n/remote
+.P2
+All connections made by Inferno are authenticated. The default connection
+made by
+.I mount
+is authenticated but uses neither encryption nor secure digests.
+You can pass an argument to
+.I mount
+to specify
+a more secure connection:
+its
+.CW -C
+option gives it a hashing and an encryption algorithm to be applied to
+the connection.
+.KS
+.Ss "Make a secure authenticated connection."
+For example,
+.P1
+mount -C sha1/rc4_256 \fIserveraddr\fP /n/remote
+.P2
+makes an authenticated connection to the machine given by
+.I serveraddr ,
+then engages SHA1 hashing for message digesting and 256-bit RC4 for encryption.
+.KE
+It mounts the namespace served by
+.I serveraddr 's
+Styx service on the local Inferno directory
+.CW /n/remote .
+.NH
+Adding new users
+.LP
+Every inferno process has an associated
+.I "user name" .
+At boot time the user name is set equal to your login name on the host
+operating system.
+The user name is used by
+.I wm/logon
+to select the home directory, and
+by other programs like
+.I mount
+when it searches for certificates.
+(It can also control permission for file access on the local system in native Inferno
+and some hosted Inferno configurations.)
+When you attach to a server on another
+system the user name in the authenticating certificate can be used by
+the remote file service to set the user name appropriately there.†
+.FS
+.FA
+†The details are system-dependent and currently subject to change.
+.FE
+.LP
+To create a new user, copy the directory
+.CW /usr/inferno
+into
+\f(CW/usr/\fP\fIusername\fP.
+If the user is to have access to services on the network,
+make an authentication server entry using
+.I changelogin (8).
+The user can change the stored secret using
+.I passwd (1),
+if desired.
+Having logged in for the first time, the user should generate
+a default public/private key set using
+.I getauthinfo (8).
+(The authentication services must be running somewhere.)
+.LP
+The
+.I wm
+window manager program
+.I wm/logon
+allows a user to login to the local Inferno system as an Inferno
+user (different from the host user name).
+Its use is shown next.
+.Ss "Re-start Inferno."
+You should now close down any instances of
+.I emu
+that you are currently running.
+The quickest way to do this is to
+type
+.I control-c
+in the emu window in which you ran
+.I wm/wm .
+Start a new
+.I emu ,
+as before, by either running
+.P1
+emu
+.P2
+or by choosing the appropriate entry from your start menu on
+Windows machines. This time, start network services
+.P1
+svc/net
+.P2
+and then run
+.P1
+wm/wm wm/logon
+.P2
+and log in as user
+.I inferno .
+When you log in,
+.I wm/logon
+will change directory to
+.CW /usr/inferno
+and then write the name
+.CW inferno
+to
+.CW /dev/user .
+If the file
+.CW /usr/inferno/namespace
+exists it will be used to construct a new namespace for the user
+based on the commands that it contains (see
+.I newns (2)).
+.NH
+What next
+.LP
+You should now have a fully functional Inferno system.
+You will need to have a three button mouse to use
+.I acme ,
+.I wm ,
+or
+.I plumbing .
+.LP
+To learn more you could start with the manual pages for:
+.I intro (1),
+.I emu (1),
+.I wm (1),
+.I wm-misc (1),
+.I sh (1),
+.I acme (1),
+and
+.I limbo (1)
+and also the papers in sections 1, 2 and 3
+of Volume 2 of
+.I "The Inferno Programmer's Manual" .