INTRO(1): introduction to clive
__________________________________________________
USAGE
; Importzx
; export GOROOT=/zx/sys/golang
; export PLAN9=/plan9
; export CPUTYPE=darwin_amd64
; export GOPATH=/zx/usr/$USER/gosrc
; export GOBIN=/zx/usr/$USER/bin/$CPUTYPE
; PATH=$PATH:/zx/bin/$CPUTYPE:/zx/bin/rc:$PLAN9/bin
; NS='/ /
/zx zx!tcp!zxserver!zx!main
'
DESCRIPTION
Clive is a system built out of services interconnected through
channels and other network connections. Processes in clive run on
other hosted operating systems, because there is no native clive
kernel as of now.
The central part of the system is a file system (or rather, a set
of file systems) exported through the zx protocol. The file
system(s) may be mounted on UNIX-like systems through fuse, to
permit alien (UNIX) commands to operate on Clive services. The
Clive shell and other clive commands know how to speak zx
directly to Clive servers.
The main tree is usually mounted at /zx and its dump can be found
at /dump. The /once tree keeps stuff not be dumped. The tree at
/x is used to request command execution via xcmd(1). The dump
contains a frozen version of the main tree for each day.
Directories named tmp or tmp.* or *.tmp or containing a file
named NODUMP are never copied to the dump. Files with names
starting with a dot character (.) are never dumped. See nspace(3)
for the conventions of the name space.
File system services are split into finders and zx file trees.
Most Clive servers are both finders and file trees.
A finder accepts find requests to find directory entries. A file
tree accepts file operations on directory entries. Directory
entries are sets of name/value pairs, where certain attributes
are expected to exist.
Clive commands carry a per-process name-space where foreign
(UNIX) or zx file systems may be imported. The name space maps
name prefixes to ordered sets of directory entries and accepts
find requests to gather directory entries of interest. The name
space is initialized by inspecting the NS environment variable,
which can be adjusted at will for different commands, and
inherited when new processes are created.
Command I/O relies on input and output channels, carrying data as
byte arrays, directory entries, file addresses, and other types
in general. Each channel has a name and it is customary to use
in, out, and err to represent the channels for standard input,
output, and error.
Commands executed within ix(1) also have the ink output channel,
used to let them output graphical interfaces and requests for ix
to look for things or to execute commands.
Some commands accept a configuration file. The convention is to
provide the configuration in the environment, or in a file at
$home/lib, or in a dot-file at $home. For example, ql(1) looks
for $ql, or the file $home/lib/ql, or the file $home/.ql.
File names given to most commands are a combination of a file
(path) name and a predicate. Either (or both) may be missing from
a name. The file name along with the predicate is used to select
files matching the name/predicate pair. See names(3) for a
description and examples of names and predicates.
Standard I/O in Clive happens through channels of arbitrary data
types but these conventions hold:
+o Only []byte messages are considered actual data to be
processed.
+o zx.Dir directory entries indicate to which file the
following data refers to.
+o All other (unknown) messages are to be forwarded to the
output when read from the input.
Most commands rely on these conventions so that, for example, a
command lists files and retrieves file data from the server and
following commands in a shell pipe-line operate on such data
without knowing how to retrieve files from the server. For
example:
; gf src,- | gr func | pf
gets regular files under the src directory and sends them to gr
to select lines containing func, which sends the result to pf to
print the result.
A Clive command may be given input files either through the
standard input or, if the command accepts that, by supplying
names in the command line. Names are a combination of a file
name and a predicate. Note that more than one file can be sent
either way. Clive is not UNIX.
Many commands accept a -u flag that makes them issue output for
UNIX, and not for clive. That is the default in pf. By default,
all commands process the standard stream of messages and so they
would not work as expected if they are fed by a unix output
stream or their output is sent to a unix device or command. The
commands rf and pf convert a UNIX stream to a Clive stream and
vice-versa. For example
; seq 15 | rf | gr 1 | pf
Alien commands are relegated to using the FUSE provided services
and are not aware of the Clive name spaces.
+o This section documents shell commands.
+o Section 2 documents source packages (in Go).
+o Section 3 documents conventions.
The synopsys in the commands follows the UNIX style, but uses
curly brackets to indicate flags that may be repeated multiple
times.
EXAMPLES
To import the main tree using the ZX file protocol:
; Importzx
which does something like:
; zxfuse -n 'tcp!crun.lsub.org!zx!dump' /dump&
; zxfuse -v 'tcp!crun.lsub.org!zx!main' /zx&
...
To work on your local tree, in the environment set by the
commands in the synopsys:
; export GOBIN=/zx/usr/$USER/bin/$CPUTYPE
; export GOPATH=/zx/usr/$USER/gosrc
; go install ....
To work in the system, in the same environment:
; export GOBIN=/zx/bin/$CPUTYPE
; export GOPATH=/zx/sys
; go install ....
or
; Go install ...
See intro(2) for an implementation example of a hello-world clive
command.
SOURCE
+o /zx/sys/src/clive
+o /zx/bin/rc
SEE ALSO
+o intro(2)
+o nspace(3)
+o names(3)
+o dir(3)
__________________________________________________
User's manual. Section 1. Copyright © LSUB 2014-2016