Inferno Contribution: netinstall
Installation of the Inferno Software
Installation of the Inferno Software
Inferno can run as either a native operating system or as a hosted virtual operating system. This
document explains how to configure the system for basic networking when installing to a hosted environment.
Third edition Inferno can run as a hosted virtual operating system on top of Plan 9, Unix or Windows. In
this document, the term Unix is used to cover all supported variants,
currently FreeBSD, Linux and Solaris, and
the term Windows covers Microsoft Windows 95, Windows 98, Windows Nt and Windows 2000.
1. Preparation
You should ensure that there are at least 100 Mbytes of free space
on the filesystem.
Skip to the appropriate section below depending upon whether
you obtain Inferno from a network download or from a CD-ROM.
Installing from a Network Download
To install the 'binary' version of Inferno from the network
you will need to download two files: the Inferno component (
inferno.tgz)
and a platform component for your target machine
(For example
Plan9.tgz or
Nt.tgz).
The component files are in gziped tar format and
should both be unpacked into the same temporary directory. We will call
this directory the Inferno media directory.
- On Windows
- Unpack the files with WinZip and remember to check the
Use folder names tickbox in the WinZip Extract dialog box
otherwise the archive directory hierarchy will not be preserved.
- On Plan 9
- Unpack the files with gzip and tar:
-
gunzip <inferno.tgz | tar x
gunzip <Plan9.tgz | tar x
- On Unix or Linux
- Unpack the files with tar and use the -p option
to ensure that the correct file permissions are taken from the
archive file.
If your tar has no -p option,
you should run:
-
umask 0
to disable masking of the file permissions before running tar.
For example, to unpack the archive on Linux using the
-z option to invoke gzip:
-
tar xzpf inferno.tgz
tar xzpf Linux.tgz
On systems for which tar has no -z option, you must use gzip directly:
-
gunzip <inferno.tgz | tar xpf -
gunzip <Linux.tgz | tar xpf -
Once you unpack the component files you should see (at least) the following
files and directories in the media directory:
LICENCE
README.html # this document
dis/
install/
In addition, you should see a platform subdirectory, named
Plan9,
Linux, or
Nt depending upon which
platform component you downloaded.
Once you have completed the installation you can delete the media
directory and its contents.
Installing from a CD-ROM
To install the `binary' version of Inferno from a CD-ROM you need to find
the Inferno media directory on the CD-ROM.
Unless Inferno is sharing the CD-ROM with other software
it will be the top level directory on the CD-ROM.
The Inferno media directory is likely to contain (at least) the following
files and directories:
LICENCE
Linux/
Nt/
Plan9/
README.html # this document
dis/
install/
mnt/
n/
tmp/
The CD-ROM can be used to install Inferno to more than one platform.
The media directory contains a subdirectory for each of the platforms
supported by the software on the CD-ROM.
A Note on the Media Directory
This directory contains a minimal Inferno
root filesystem
that is used by the installation program.
The
install subdirectory contains an installation program for each platform,
usually in the form of a shell script;
for Windows systems, it is a setup.exe program.
Each platform subdirectory
(
Plan9,
Linux, or
Nt)
includes the Inferno executable
emu (or
emu.exe for Windows) for that platform
in the directory:
-
platform/architecture/bin
The installation script (or
setup.exe on Windows) uses a cut-down
Inferno image to unpack the full installation.
2. Performing the Installation
First, read the licence in the file
LICENCE.
If you do not agree to the terms and conditions
of the licence you must not install the Inferno software and should remove any downloaded Inferno files.
You need to decide on a suitable location for Inferno; if you are installing on a Windows
platform the installation program (setup.exe) will create this directory
for you, on other platforms you should ensure that the directory exists and has suitable
access permissions.
The usual Inferno installation directory is /usr/inferno for Plan 9 and Unix
systems and c:\users\inferno on Windows systems. This directory will
form the root of the Inferno filesystem; the installation program will install files
into and below this inferno_root directory.
Windows
To install Inferno on a Windows platform you should:
- Run the setup.exe program located in the install
subdirectory of the media directory.
- Enter the pathname of the chosen inferno_root directory and press Enter.
The installation program will then perform the following tasks:
- Execute Nt\386\bin\emu.exe
to unpack the Inferno and Nt components.
- Copy the LICENCE file to the root of the Inferno filesystem.
- Rename the file emu.new to emu.exe
in the Nt\386\bin directory of the new Inferno filesystem.
- Create an entry in the Windows registry for the location of the Inferno root directory.
- Create a Windows Start Menu shortcut to emu.exe
entitled: Vita Nuova Inferno.
When installing on Windows NT or Windows 2000, the installation program determines
if the current user belongs to the
Administrators
group.
If so, the Start Menu entry is created in the
All Users
profile, otherwise it is created in the user's private profile.
On Windows 95 and Windows 98, if the user has a private profile the
Start Menu entry is created there,
otherwise it is created in the main system Start Menu.
Plan 9
To install Inferno on the Plan 9 platform you should:
- Turn permission checking off with disk/kfscmd allow.
- Edit the /adm/users file.
The files in the Inferno archive have been stored with owner inferno
and group inf. To preserve the same owner and group you should add a
user inferno and group inf to the /adm/users file.
The entries would look something like this:
3:inferno:inferno:
10003:inf::inferno
You will need to change the first number on each line to ensure that it does not clash with the number
of an existing entry.
- Run kfscmd to cause kfs to re-read /adm/users.
disk/kfscmd user
- Run
rc /install_path/install/Plan9.rc -u inferno_root
Where install_path is the full pathname to the
media directory and inferno_root is the chosen Inferno root directory.
The installation program will then perform the following tasks:
- Execute Plan9/$cputype/bin/emu
to unpack the Inferno and Plan 9 components.
- Copy the LICENCE file to the root of the Inferno filesystem.
- Rename the file emu.new to emu
in the Plan9/$cputype/bin directory of the new Inferno filesystem.
The -u
option causes the ownership and group membership of the installed files
to be taken from the archive. If you omit it, the files will be owned by you
and have group sys.
- Make sure that the window is able to scroll to display the list of directories
that the installation software prints. You may need to select the scroll
option from the menu displayed when you click on the middle mouse button
in the output window to enable this.
- Turn permission checking back on again with disk/kfscmd disallow.
Unix or Linux
On Posix systems, files installed from the distribution will have
owner and group determined by the owner and group of the user
who performs the installation.
The convention, here, is to create a new user,
inferno,
belonging to a new group,
inf and to become that user
before installing.
To install Inferno on a Unix or Linux platform you should:
- Optionally, edit the system user and group files
(probably /etc/passwd and /etc/group)
to create
a user inferno and a group inf.
Then become user inferno with:
- su inferno
- Run sh /install_path/install/platform-arch.sh inferno_root.
Where
platform and
arch are one of the supported combinations of
Unix variant and CPU architecture,
install_path is the full pathname to the
media directory and
inferno_root is the chosen
inferno_root directory.
The installation program will then perform the following tasks:
- Execute platform/arch/bin/emu
to unpack the Inferno and platform components.
- Copy the LICENCE file to the root of the Inferno filesystem.
- Rename the file emu.new to emu
in the platform/arch/bin directory of the new Inferno filesystem.
3. Running Inferno
Inferno host executables are kept in a directory corresponding to the combination of host
operating system and CPU architecture - the Inferno
bin directory.
- inferno_root/host_os/host_arch/bin
Plan 9 users should add a line to their
lib/profile file that binds this directory after their
/bin directory.
- bind -a /usr/inferno/Plan9/$cputype/bin /bin
The bind is done after the existing
bin directory to avoid hiding your existing Plan 9 compilers. If, at a later
stage, you build either the hosted or native Inferno kernels you should ensure that the Inferno compilers are
used rather than the Plan 9 compilers. The differences between the two compiler suites are likely to be
reduced in future releases. On Windows systems the
host_os is always
Nt and
host_arch is always
386
and the installation program will create an entry on the Start Menu to invoke Inferno. For Unix systems or
Windows systems in which Inferno will be started from a command shell, the environment variable
PATH
should be set to include the Inferno
bin directory. For Windows 95 and Windows 98 this should be done
in the
\autoexec.bat file by adding a line like
- PATH="c:\users\inferno\Nt\386\bin";%PATH%
You will need to reboot Windows to have the system re-read the
\autoexec.bat file. For Windows NT
and Windows 2000 modify the
Path environment variable through
Control Panel -> System ->
Environment. For Unix this should be done in your
.profile file by adding a line like
- PATH="/usr/inferno/Linux/386/bin:$PATH"
Don't forget to ensure that
PATH is exported. You may need to log out and back in again for these changes
to take effect.
- ¤ Step 1: Start Inferno.
Hosted inferno is run by invoking an executable called
emu.
On Windows, select the Inferno option from the Start Menu. This will invoke
emu with appropriate arguments to find its files in
inferno_root. If you need to change any of the options passed to
emu when
invoked from the Start Menu you need to do this by clicking the right mouse button on the Windows task
bar and choosing
Properties -> Start Menu Programs -> Advanced to modify the shortcut used for Inferno.
For Unix and Plan 9, you will need to tell
emu where to find the Inferno file tree by passing it the
-rrootpath command line option. For example
- emu -r/usr/john/inferno
Without the
-r option it will look for the file tree in
/usr/inferno on Plan 9 and Unix and
\users\inferno on the current drive for Windows. By default, when using graphics,
emu will use a
window with a resolution of 640 x 480 pixels.
To use a larger resolution you will need to pass
emu the
-gXsizexYsize command line option. So, for example, to invoke
emu as above but with a resolution of
1024 x 768 pixels the full command line would be
- emu -r/usr/john/inferno -g1024x768
When invoked in this way
emu displays a command window running the Inferno shell
/dis/sh.dis. To
avoid typing the command line options each time you invoke
emu you can store them in the environment
variable
EMU which is interrogated when
emu is started and might as well be set along side the
PATH environment variable if the same configuration options are to be used on each invocation.
For Windows:
- set EMU="-rd:\users\john\inferno -g1024x768"
For Plan 9:
- EMU=(-r/usr/john/inferno -g1024x768)
For Unix:
- EMU="-r/usr/john/inferno -g1024x768"
An alternative to using the
EMU environment variable is to place the correct invocation in a script
file (or batch file, for Windows) and invoke that instead of running
emu directly. It is important to note that
for Windows the
-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
- emu
or the appropriate script file, should result in output which look something like this
Inferno Third Edition (4 May 2000) main (pid=112260) interp
Initialize Dis: /dis/emuinit.dis
;
You are now running third edition Inferno, built on May 4th 2000 and the word
interp means that the
Inferno Dis virtual machine is interpreting Dis instructions. You can add a further option
-c1 (see the
emu(1) manual page) to cause
emu to start up in
compile mode in which the JIT compiler is automatically
invoked to compile all Dis operations to native machine instructions on demand. In
compile mode most
programs will run significantly faster. Whether in compiled or interpreted mode you should now have a
functional hosted Inferno system. When Inferno starts the initial
/dis/sh.dis it reads commands from
the file
/lib/sh/profile before becoming interactive. See the manual pages for the shell
sh(1) to learn
more about tailoring the initial environment. The semi-colon is the default shell prompt. From this command window you should be able to see the installed Inferno files and directories
- lc /
The command
lc presents the contents of its directory argument in columnar fashion to standard output in
the command window.
; lc /
FreeBSD/ Plan9/ dis/ lib/ mkfiles/ nvfs/
Hp/ Solaris/ env/ licencedb/ mnt/ prog/
Irix/ acme/ fonts/ locale/ module/ services/
LICENCE appl/ icons/ mail/ n/ tmp/
Linux/ chan/ install/ man/ net/ usr/
Nt/ dev/ keydb/ mkconfig notice wrap/
;
Only the files and directories in and below the
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
os(1) and
cmd(3) for an interface to host commands). From this point onwards in this paper all file paths not qualified with
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
emu and on Unix systems with that user's group id.
4. Running the wm Window Manager
Many Inferno programs run under the
wm window manager.
Inferno has a simple editor,
wm/edit,
that can be used to edit the inferno configuration files.
- ¤ Step 2: Start the window manager.
Invoke
wm by typing
- wm/wm
You should see a new window open with a blue background and a small
Vita Nuova logo in the bottom left
hand corner. Click on the logo with mouse button 1 to reveal a small menu.
Selecting the
Edit entry will
start
wm/edit.
In common with most
wm programs the editor has three small buttons
in a line at its top right hand corner. Clicking on the X button, the right most button,
will close the program down. The left most 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
wm window. You can restore a minimised
window by clicking on its entry in the application bar.
The initial
wm configuration is determined by the
contents of the shell script
/lib/wmsetup (see
sh(1)).
- ¤ Step 3: Open a shell window.
Choose the
shell option from the menu to open up a shell window.
The configuration of Inferno will be done from this shell window.
5. Manual Pages
Manual pages for all of the system commands are available from a shell window. Use the
man or
wm/man commands. For example,
- man wm
will give information about
wm. And
- man man
will give information about using
man.
Wm/man makes use of
the Tk text widget to produce slightly more attractive output than
man.
Here, and in other Inferno documentation you will see references to manual
page entries of the form
command(section).
You can display the manual page for the command by running
- man command
or
- man section command
if the manual page appears in more than one section.
6. Initial Namespace
The initial Inferno namespace is built by placing the root device '#/' (see
root(3)) at the root of the namespace and binding
- i) the host filesystem device '#U' (see fs(3)) containing the inferno_root subtree of the host filesystem at the root of the Inferno filesystem,
- ii) the console device '#c' (see cons(3)) in /dev,
- iii) the prog device '#p' (see prog(3)) onto /prog,
- iv) the IP device '#I' (see ip(3)) in /net, and
- v) the environment device '#e' (see env(3)) at /dev/env.
You can see the sequence of commands required to construct the current namespace by running
- ns
To use IP networking, the IP device (
ip(3)) must have been bound into
/net. Typing
- ls -l /net
(see
ls(1)) should result in something like
- dr-xr-xr-x I 0 bootes bootes 0 Feb 02 14:48 /net/tcp
- dr-xr-xr-x I 1 bootes bootes 0 Feb 02 14:48 /net/udp
We can now configure Inferno to allow secure connections to other Inferno systems. First we will start a
signer process which will generate certificates for both the system making a connection and the system
receiving the connection. If there is only one machine in your Inferno network then the same machine will
be user as client, server and certificate signer.
7. Connection Server
The connection server (see
cs(8) and
db(6)) translates symbolic network names and services into
instructions for connecting to a given service. The file
/services/cs/db defines a mapping from
machine names of the form
$service to either a network address or a numeric address. The connection
server will convert such a machine name using this file into either a numeric address or a machine name. A
typical
/services/cs/db file will look something like this
- $SIGNER doppio
- $FILESERVER rotta
- $MAILSERVER doppio
- $PROXY pox
Network and service names are passed through to the host for conversion to numeric 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
/services/cs/services which should contain at least the following entries
- styx 6666/tcp # Main file service
- mpeg 6667/tcp # Mpeg stream
- rstyx 6668/tcp # Remote invocation
- infdb 6669/tcp # Database connection
- infweb 6670/tcp # inferno web server
- infsigner 6671/tcp # inferno signing services
- infcsigner 6672/tcp # inferno signing services
- inflogin 6673/tcp # inferno login service
- virgil 2202/udp virgild # inferno info
For the moment, leave this file as it is. You will need to modify this file, at some point in the future, if you
add new services to Inferno and want to refer to them by name.
- ¤ Step 4: Start the connection server.
To run the connection server, type
- lib/cs
You should now see a new file in the
/net directory called
cs. Run the command
- ls /net
You should see the following output
- /net/cs
- /net/tcp
- /net/udp
Before an Inferno machine can establish a connection to an Inferno service on another machine, each needs
to obtain a certificate from a common signer. To bootstrap this process we will configure this machine as a
signer.
8. Network Services
The command
srv is used to start listeners for local network servers (see
srv(8)).
Srv starts a listener
for each service configured in
/services/server/config.
- S infsigner tcp /dis/lib/signer.dis
- S infcsigner tcp /dis/lib/countersigner.dis
- S inflogin tcp /dis/lib/logind.dis
- S styx tcp /dis/lib/styxd.dis nossl clear sha md5 rc4 sha/rc4
- S rstyx tcp /dis/lib/rstyxd.dis nossl clear sha md5 rc4 sha/rc4
- S infdb tcp /dis/lib/dbsrv.dis nossl clear sha md5 rc4 sha/rc4
- S virgil udp /dis/lib/virgild.dis
- M 67 udp /dis/lib/bootp.dis
- M 69 udp /dis/lib/tftpd.dis
Documentation for these servers can be found in section 8 of the Programmers Manual (Volume 1). Start the listeners on this machine by running
srv.
- ¤ Step 5: Start the network listener services.
Type
- lib/srv
Your servers will now be running. To confirm this type
- netstat
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 your
/services/server/config file you should see something which looks like this
- tcp/0 inferno 200.1.1.89!6669 0.0.0.0!0 Announced
- tcp/1 inferno 200.1.1.89!6668 0.0.0.0!0 Announced
- tcp/2 inferno 200.1.1.89!6666 0.0.0.0!0 Announced
- tcp/3 inferno 200.1.1.89!6673 0.0.0.0!0 Announced
- tcp/4 inferno 200.1.1.89!6672 0.0.0.0!0 Announced
- tcp/5 inferno 200.1.1.89!6671 0.0.0.0!0 Announced
- udp/0 inferno 200.1.1.89!2202 0.0.0.0!0 Announced
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
/net.
The connection addresses are all of the form
host!port for these IP based services, and the remote
addresses are not filled in because they all represent listening services that are in the
Announced state. In
this example the fourth line shows a TCP service listening on port 6673. Examining
/services/cs/services with
grep (see
grep(1)) shows that the listener on port 6673 is the Inferno
login service.
- grep 6673 /services/cs/services
gives
- inflogin 6673/tcp # inferno login service
Before the signing service can be used to generate certificates some configuration is required. The signer
needs a public and private key-pair and a database of user names and passwords.
9. Configuring a Signer
To use authenticated connections we need to set up a signer to generate certificates for users (see
createsignerkey(8) and
signer(8)). For two machines to communicate securely they must both have
obtained a certificate from the same signer. 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.
- ¤ Step 6: Generate a signer key.
On the signer machine run
- lib/createsignerkey name
In place of
name enter the network name of the signer. This value will appear as the signer name in each
certificate generated by the signer.
Createsignerkey creates public and private keys that are used by the
signer when generating certificates.
- ¤ Step 7: Enter user names and secrets.
For each user to be authenticated by the signer run
- changelogin username
You will be prompted to supply a secret (i.e. password) and expiration date. The expiration date will be
used as the expiration date of certificates generated for that user.
Changelogin (see
changelogin(8)) will
create and update entries in the file
/keydb/password. 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
inferno.
10. Establishing a Secure Connection
To establish a secure connection between two machines, each needs to have a certificate signed by a common signer (which need not be a third machine). If you have only one Inferno machine you can experiment with secure connections by making the same machine signer, server and client.
- ¤ Step 8: Generate a server certificate.
On the server machine, ensure that
lib/cs is running. You will need it if you refer to your signer by hostname instead of IP address. If in doubt, or if it is not running, type
- lib/cs
On the server machine, use
getauthinfo(8) to obtain a certificate and save it in a file named
default by running
- getauthinfo default
Getauthinfo will prompt for the address of your signer and for a remote username and password combination.
Getauthinfo will connect to the
inflogin service on the signer and authenticate you against its user and
password database,
/keydb/password, using the username and password that you entered. Answer
Yes to the question that asks if you want to save the certificate in a file.
Getauthinfo will save a certificate
in the file
/usr/user/keyring/default where
user is the name in
/dev/user.
- ¤ Step 9: Generate a client certificate.
Obtain a certificate for the client in the same way. Type
- getauthinfo default
If you wish you can 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
- getauthinfo tcp!hostname
Getauthinfo stores the certificate in the file
/usr/user/keyring/keyname where
user is the name in
/dev/user and
keyname is the argument given to
getauthinfo. Again, answer
Yes to the question that
asks if you want to save the certificate in a file. Now that both client and server have a certificate obtained
from the same signer it is possible to establish a secure connection between them. If you have only one
Inferno system you can still test the configuration by using the same machine as both client and server.
Alternatively, start a second copy of
emu on the same machine and treat one as the server and one as the
client.
- ¤ Step 10: Make an authenticated connection.
On the server, make sure that
srv is running, type
- netstat
you should see a line for the TCP service listening on port 6666.
- tcp/2 inferno 200.1.1.89!6666 0.0.0.0!0 Announced
If you do not see any output, start
srv by running
- lib/srv
The listener on port 6666 is expecting to serve the Inferno file protocol
Styx to export a namespace.
- grep 6666 /services/cs/services
Gives
styx 6666/tcp # Main file service
The line for the
styx service in the file
/services/server/config shows that the server
/dis/lib/styxd.dis is listening on port 6666. The namespace that
styxd serves is the one that it inherited when it was started with
srv.
On the client, make sure that
Cs is running by typing
- lib/cs
Now that
lib/cs is running on the client and
lib/srv is running on the server you can test the service.
On the client, confirm that
/n/remote is an empty directory with
- lc /n/remote
On the client, you can now mount the namespace that
styxd is serving on the server onto the client directory
/n/remote by typing
- mount tcp!
serveraddr /n/remote
Where
serveraddr is the IP address of the server or a name which the host can resolve to the IP address of the server. Now
- lc /n/remote
should reveal the files and directories in the namespace being served by
styxd.
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
mount command - other processes are unaffected.
You can create, remove or modify files and directories in and under
/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
unmount. Type
- unmount /n/remote
You can confirm that it has gone by running
- ls /n/remote
All connections made by Inferno are authenticated. The default connection made by
mount is authenticated
but does not use SSL. The arguments passed to
styxd in its entry in
/services/server/config
- S rstyx tcp /dis/lib/rstyxd.dis nossl clear sha md5 rc4 sha/rc4
define the different combinations of security algorithms that
styxd is prepared to accept. You can pass an
argument to
mount to specify a more secure connection. The
-C option to
mount can be used to specify a hashing and an encryption algorithm
to be applied to the connection.
-
- ¤ Step 11: Make a secure authenticated connection.
For example,
- mount -C sha/rc4 tcp!
serveraddr /n/remote
will make an authenticated connection to the machine given by
serveraddr using SHA hashing for message
digesting and RC4 for encryption and mount the namespace served by the
server's
styx service on the client
directory
/n/remote.
11. Adding new users
Every inferno process has an associated
user name.
At boot time the user name is set equal to your
login name on the host operating system.
You can change the user name by writing the new user name to
the file
/dev/user. This is a one time operation; once the user name has been changed from the original
it cannot be changed again in that process. The user name is used to select the directory in which programs
like
mount search for certificates. When you attach to a server on another system the user name is passed
across to the remote system as part of the attach procedure allowing the remote system to assign the correct
ownership to files created on the remote server. The
wm window manager program
wm/logon allows a user
to login to the local Inferno system before running the main window manager program
wm/wm.
- ¤ Step 12: Re-start Inferno.
You should now close down any instances of
emu that you are currently running. The quickest way to do
this is to type
control-c in the emu window in which you ran
wm/wm. Start a new
emu, as before, by either
running
- emu
or by choosing the appropriate entry from your Start Menu on Windows machines.
This time, run
- wm/logon
and log in as user
inferno. When you log in
wm/logon will change directory to
/usr/inferno and then
write the name
inferno to
/dev/user. If this is the first time that you have logged on as user
inferno
to this machine it will display a licence. If the file
/usr/inferno/namespace exists it will be used to
construct a new namespace for the user based on the commands that it contains (see
newns(2)).
Logon will
then will then start
wm/wm.
12. What next
You should now have a fully functional Inferno system. You will need to have a three button mouse to use
acme,
wm, or
plumbing.
To learn more you could start with the manual pages for:
intro(1),
emu(1),
wm(1),
wm-misc(1),
sh(1),
acme(1), and
limbo(1)
and also the papers in sections 1, 2 and 3 of volume two of the Inferno Programmer's Manual.
Copyright © 2000 Vita Nuova Holdings Limited. All rights reserved.
Inferno Contribution: netinstall