From b4f88d0ec364f00196127ea29e8db5033368e23a Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 13 Aug 2003 09:13:52 +0000 Subject: [PATCH] * Split the book.xml into several xml files. --- doc/manual/Makefile.am | 9 +- doc/manual/book.xml | 477 +-------------------------------- doc/manual/bugs.xml | 26 ++ doc/manual/installation.xml | 79 ++++++ doc/manual/introduction.xml | 98 +++++++ doc/manual/nix-reference.xml | 213 +++++++++++++++ doc/manual/troubleshooting.xml | 49 ++++ 7 files changed, 481 insertions(+), 470 deletions(-) create mode 100644 doc/manual/bugs.xml create mode 100644 doc/manual/installation.xml create mode 100644 doc/manual/introduction.xml create mode 100644 doc/manual/nix-reference.xml create mode 100644 doc/manual/troubleshooting.xml diff --git a/doc/manual/Makefile.am b/doc/manual/Makefile.am index a4e3f24cee..a29592f1e1 100644 --- a/doc/manual/Makefile.am +++ b/doc/manual/Makefile.am @@ -2,17 +2,20 @@ DOCBOOK_DTD = /nix/current/xml/dtd/docbook DOCBOOK_XSL = /nix/current/xml/xsl/docbook XML = /usr/share/doc/packages/sp/html-xml/xml.soc -%.is-valid: %.xml +SOURCES = book.xml introduction.xml installation.xml nix-reference.xml \ + troubleshooting.xml bugs.xml + +book.is-valid: $(SOURCES) SP_CHARSET_FIXED=YES SP_ENCODING=XML \ nsgmls -wxml -c $(XML) -c $(DOCBOOK_DTD)/docbook.cat -ges $< touch $@ man1_MANS = nix.1 -man nix.1: book.is-valid +man nix.1: $(SOURCES) book.is-valid xsltproc $(DOCBOOK_XSL)/manpages/docbook.xsl book.xml -%.html: %.xml %.is-valid +book.html: $(SOURCES) book.is-valid xsltproc --output book.html $(DOCBOOK_XSL)/html/docbook.xsl book.xml all-local: book.html diff --git a/doc/manual/book.xml b/doc/manual/book.xml index 3d54edfcb6..eb0475a620 100644 --- a/doc/manual/book.xml +++ b/doc/manual/book.xml @@ -1,503 +1,46 @@ + + + + ]> Nix: The Manual - - - - - Introduction - - - The problem space - - - Nix is a system for controlling the automatic creation and distribution - of data, such as computer programs and other software artifacts. This - is a very general problem, and there are many applications that fall - under this description. - - - - Build management - - - Build management tools are used to perform software - builds, that is, the construction of derived products - such as executable programs from source code. A commonly used build - tool is Make, which is a standard tool on Unix systems. These tools - have to deal with several issues: - - - - - - - - - - - - Package management - - - After software has been built, is must also be - deployed in the intended target environment, - e.g., the user's workstation. Examples include the Red Hat package - manager (RPM), Microsoft's MSI, and so on. Here also we have to deal - with several issues: - - - - The creation of packages from some formal - description of what artifacts should be distributed in the - package. - - - - - The deployment of packages, that is, the - mechanism by which we get them onto the intended target - environment. This can be as simple as copying a file, but - complexity comes from the wide range of possible installation - media (such as a network install), and the scalability of the - process (if a program must be installed on a thousand systems, - we do not want to visit each system and perform some manual - steps to install the program on that system; that is, the - complexity for the system administrator should be constant, not - linear). - - - - - - - - - - The Nix system - - - ... - - - - Existing tools in this field generally both a underlying model (such as - the derivation graph of build tools, or the versioning scheme that - determines when two packages are compatible in a package - management system) and a formalism that allows ... - - - - Following the principle of separation of mechanism and policy, the Nix - system separates the low-level aspect of file - system object management form the high-level - aspect of the ... - - - - - - - - + &introduction; + &installation; A Guided Tour - Bla bla - - - Fix Language Reference - Bla bla - - - Nix Syntax and Semantics - Bla bla - - - - - Installation - - - Prerequisites - - - Nix uses Sleepycat's Berkeley DB and CWI's ATerm library. However, - these are fetched automatically as part of the build process. - - - - Other than that, you need a good C++ compiler. GCC 2.95 does not - appear to work; please use GCC 3.x. - - - - - Obtaining Nix - - - Nix can be obtained from its Subversion - repository. For example, the following command will check - out the latest revision into a directory called - nix: - - - -$ svn checkout http://losser.st-lab.cs.uu.nl:12080/repos/trace/nix/trunk nix - - - Likewise, specific releases can be obtained from the tags - directory of the repository. If you don't have Subversion, - you can download a compressed - tar-file of the latest revision of the repository. - - - - - - Building Nix - - - To build Nix, do the following: - - - -$ autoreconf -i -$ ./configure options... -$ make -$ make install - - - Currently, the only useful switch for configure is - to specify - where Nix is to be installed. The default installation directory is - /nix. You can change this to any location you - like. You should ensure that you have write permission to the - installation prefix. - - - - - It is advisable not to change the installation - prefix, since doing so will in all likelihood make it impossible to - use derivates built on other systems. - - - - - - - - - - Command Reference - - - - nix - manipulate or query the Nix store - - - - - nix - - - - - - - - - operation - options - arguments - - - - - Description - - - The command nix provides access to the Nix store. - This is the (set of) path(s) where Nix expressions and the file - system objects built by them are stored. - - - - nix has many subcommands called - operations. These are individually documented - below. Exactly one operation must always be provided. - - - - - - Common Options - - - In this section the options that are common to all Nix operations are - listed. These options are allowed for every subcommand (although - they may not always have an effect). - - - - - - - - - Indicates that any identifier arguments to the operation are - paths in the store rather than identifiers. - - - - - - - - - Increases the level of verbosity of diagnostic messages printed - on standard error. For each Nix operation, the information - printed on standard output is well-defined and specified below - in the respective sections. Any diagnostic information is - printed on standard error, never on standard output. - - - - This option may be specified repeatedly. Currently, the - following verbosity levels exist: - - - - - 0 - - - Print error messages only. - - - - - 1 - - - Print informational messages. - - - - - 2 - - - Print even more informational messages. - - - - - 3 - - - Print messages that should only be useful for debugging. - - - - - 4 - - - Vomit mode: print vast amounts of debug - information. - - - - - - - - - - - - - - Operation <option>--install</option> - - - Synopsis - - nix - - - - - ids - - - - - Description - - - The operation realises the Nix - expressions identified by ids in the - file system. If these expressions are derivation expressions, they - are first normalised. That is, their target paths are are built, - unless a normal form is already known. - - - - The identifiers of the normal forms of the given Nix expressions - are printed on standard output. - - - - - - - - - Operation <option>--delete</option> - - - Synopsis - - nix - - - - - paths - - - - - Description - - - The operation unconditionally deletes - the paths paths from the Nix store. - It is an error to attempt to delete paths outside of the store. - - - - - This operation should almost never be called directly, since no - attempt is made to check whether any references exist to the - paths to be deleted. Therefore, an inconsistent system could be - the result. Deletion of paths in the store is done by the - garbage collector (which uses to delete - unreferenced paths). - - - - - - - - - - + &nix-reference; - - - - - Troubleshooting - - - Database hangs - - - If Nix or Fix appear to hang immediately after they are started, Nix's - database is probably wedged, i.e., some process died - while it held a lock on the database. The solution is to ensure that - no other processes are accessing the database and then run the - following command: - - - -$ db_recover -e -h prefix/var/nix/db - - - Here, prefix should be replaced by Nix's - installation prefix. - - - - - - - Database logfile removal - - - Every time a Nix database transaction takes place, Nix writes a record - of this transaction to a log in its database - directory to ensure that the operation can be replayed in case of a - application or system crash. However, without manual intervention, - the log grows indefinitely. Hence, unused log files should be deleted - periodically. This can be accomplished using the following command: - - - -$ rm `db_archive -a -h prefix/var/nix/db` - - - - - - - - - - - Bugs - - - - - - Nix should automatically recover the Berkeley DB database. - - - - - - Nix should automatically remove Berkeley DB logfiles. - - - - - + &troubleshooting; + &bugs; diff --git a/doc/manual/bugs.xml b/doc/manual/bugs.xml new file mode 100644 index 0000000000..33c6e767ba --- /dev/null +++ b/doc/manual/bugs.xml @@ -0,0 +1,26 @@ + + Bugs + + + + + + Nix should automatically recover the Berkeley DB database. + + + + + + Nix should automatically remove Berkeley DB logfiles. + + + + + + + + diff --git a/doc/manual/installation.xml b/doc/manual/installation.xml new file mode 100644 index 0000000000..7d8821d470 --- /dev/null +++ b/doc/manual/installation.xml @@ -0,0 +1,79 @@ + + Installation + + + Prerequisites + + + Nix uses Sleepycat's Berkeley DB and CWI's ATerm library. However, these + are fetched automatically as part of the build process. + + + + Other than that, you need a good C++ compiler. GCC 2.95 does not appear + to work; please use GCC 3.x. + + + + + Obtaining Nix + + + Nix can be obtained from its Subversion + repository. For example, the following command will check out + the latest revision into a directory called nix: + + + + $ svn checkout http://losser.st-lab.cs.uu.nl:12080/repos/trace/nix/trunk + nix + + + Likewise, specific releases can be obtained from the tags + directory of the repository. If you don't have Subversion, you + can download a compressed + tar-file of the latest revision of the repository. + + + + + + Building Nix + + + To build Nix, do the following: + + + + $ autoreconf -i $ ./configure options... $ + make $ make install + + + Currently, the only useful switch for configure is + to specify + where Nix is to be installed. The default installation directory is + /nix. You can change this to any location you like. + You should ensure that you have write permission to the installation + prefix. + + + + + It is advisable not to change the installation + prefix, since doing so will in all likelihood make it impossible to use + derivates built on other systems. + + + + + + + + diff --git a/doc/manual/introduction.xml b/doc/manual/introduction.xml new file mode 100644 index 0000000000..77a5f917ee --- /dev/null +++ b/doc/manual/introduction.xml @@ -0,0 +1,98 @@ + + Introduction + + + The problem space + + + Nix is a system for controlling the automatic creation and distribution + of data, such as computer programs and other software artifacts. This is + a very general problem, and there are many applications that fall under + this description. + + + + Build management + + + Build management tools are used to perform software + builds, that is, the construction of derived products such + as executable programs from source code. A commonly used build tool is + Make, which is a standard tool on Unix systems. These tools have to + deal with several issues: + + + + + + + + + + + + Package management + + + After software has been built, is must also be + deployed in the intended target environment, e.g., + the user's workstation. Examples include the Red Hat package manager + (RPM), Microsoft's MSI, and so on. Here also we have to deal with + several issues: + + + + The creation of packages from some formal + description of what artifacts should be distributed in the + package. + + + + + The deployment of packages, that is, the + mechanism by which we get them onto the intended target + environment. This can be as simple as copying a file, but + complexity comes from the wide range of possible installation + media (such as a network install), and the scalability of the + process (if a program must be installed on a thousand systems, we + do not want to visit each system and perform some manual steps to + install the program on that system; that is, the complexity for + the system administrator should be constant, not linear). + + + + + + + + + + The Nix system + + + ... + + + + Existing tools in this field generally both a underlying model (such as + the derivation graph of build tools, or the versioning scheme that + determines when two packages are compatible in a package + management system) and a formalism that allows ... + + + + Following the principle of separation of mechanism and policy, the Nix + system separates the low-level aspect of file system + object management form the high-level aspect of the + ... + + + + + + + diff --git a/doc/manual/nix-reference.xml b/doc/manual/nix-reference.xml new file mode 100644 index 0000000000..39c83518c3 --- /dev/null +++ b/doc/manual/nix-reference.xml @@ -0,0 +1,213 @@ + + + nix + manipulate or query the Nix store + + + + + nix + + + + + + + + + operation + options + arguments + + + + + Description + + + The command nix provides access to the Nix store. This + is the (set of) path(s) where Nix expressions and the file system objects + built by them are stored. + + + + nix has many subcommands called + operations. These are individually documented + below. Exactly one operation must always be provided. + + + + + + Common Options + + + In this section the options that are common to all Nix operations are + listed. These options are allowed for every subcommand (although they + may not always have an effect). + + + + + + + + + Indicates that any identifier arguments to the operation are paths + in the store rather than identifiers. + + + + + + + + + Increases the level of verbosity of diagnostic messages printed on + standard error. For each Nix operation, the information printed on + standard output is well-defined and specified below in the + respective sections. Any diagnostic information is printed on + standard error, never on standard output. + + + + This option may be specified repeatedly. Currently, the following + verbosity levels exist: + + + + + 0 + + + Print error messages only. + + + + + 1 + + + Print informational messages. + + + + + 2 + + + Print even more informational messages. + + + + + 3 + + + Print messages that should only be useful for debugging. + + + + + 4 + + + Vomit mode: print vast amounts of debug + information. + + + + + + + + + + + + + + Operation <option>--install</option> + + + Synopsis + + nix + + + + + ids + + + + + Description + + + The operation realises the Nix expressions + identified by ids in the file system. If + these expressions are derivation expressions, they are first + normalised. That is, their target paths are are built, unless a normal + form is already known. + + + + The identifiers of the normal forms of the given Nix expressions are + printed on standard output. + + + + + + + + + Operation <option>--delete</option> + + + Synopsis + + nix + + + + + paths + + + + + Description + + + The operation unconditionally deletes the + paths paths from the Nix store. It is an + error to attempt to delete paths outside of the store. + + + + + This operation should almost never be called directly, since no + attempt is made to verify that no references exist to the paths to + be deleted. Therefore, careless deletion can result in an + inconsistent system. Deletion of paths in the store is done by the + garbage collector (which uses to delete + unreferenced paths). + + + + + + + + + + + + + diff --git a/doc/manual/troubleshooting.xml b/doc/manual/troubleshooting.xml new file mode 100644 index 0000000000..018b3555fc --- /dev/null +++ b/doc/manual/troubleshooting.xml @@ -0,0 +1,49 @@ + + Troubleshooting + + + Database hangs + + + If Nix or Fix appear to hang immediately after they are started, Nix's + database is probably wedged, i.e., some process died while + it held a lock on the database. The solution is to ensure that no other + processes are accessing the database and then run the following command: + + + + $ db_recover -e -h prefix/var/nix/db + + + Here, prefix should be replaced by Nix's + installation prefix. + + + + + + + Database logfile removal + + + Every time a Nix database transaction takes place, Nix writes a record of + this transaction to a log in its database directory + to ensure that the operation can be replayed in case of a application or + system crash. However, without manual intervention, the log grows + indefinitely. Hence, unused log files should be deleted periodically. + This can be accomplished using the following command: + + + + $ rm `db_archive -a -h + prefix/var/nix/db` + + + + + +