From eeaf44276cb50fb341d80faa650fb62fd1cf2dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 7 Nov 2012 19:24:03 +0100 Subject: [PATCH] doc: Document the features and `guix-package'. * doc/guix.texi: Change the category to "Package management". Add an @direntry for "Invoking guix-package". (Package Management): New chapter. --- doc/guix.texi | 134 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 132 insertions(+), 2 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 8cfaa2a300..4effbc7ea8 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -9,9 +9,11 @@ @include version.texi -@dircategory Development +@dircategory Package management @direntry * guix: (guix). Guix, the functional package manager. +* guix-package: (guix)Invoking guix-package + Managing packages with Guix. * guix-build: (guix)Invoking guix-build Building packages with Guix. @end direntry @@ -61,6 +63,7 @@ This document describes Guix version @value{VERSION}. @menu * Introduction:: What is Guix about? +* Package Management:: Package installation, upgrade, etc. * Programming Interface:: Using Guix in Scheme. * Utilities:: Package management commands. @@ -106,12 +109,139 @@ input yields a different directory name. This approach is the foundation of Guix's salient features: support for transactional package upgrades and rollback, per-user installation, and -garbage collection of packages. +garbage collection of packages (@pxref{Features}). Guix has a command-line interface allowing users to build, install, upgrade, and remove packages, as well as a Scheme programming interface. The remainder of this manual describes them. +@c ********************************************************************* +@node Package Management +@chapter Package Management + +The purpose of Guix is to allow users to easily install, upgrade, and +remove software packages, without having to know about their build +procedure or dependencies. Guix also goes beyond this obvious set of +features. + +This chapter describes the main features of Guix, as well as the package +management tools it provides. + +@menu +* Features:: How Guix will make your life brighter. +* Invoking guix-package:: Package installation, removal, etc. +@end menu + +@node Features +@section Features + +When using Guix, each package ends up in the @dfn{package store}, in its +own directory---something that resembles +@file{/nix/store/xxx-package-1.2}, where @code{xxx} is a base32 string. + +Instead of referring to these directories, users have their own +@dfn{profile}, which points to the packages that they actually want to +use. That profile is normally stored in @code{$HOME/.guix-profile}, and +each user has its own profile. + +For example, if @code{alice} installed GCC 4.7.2, then +@file{/home/alice/.guix-profile/bin/gcc} points to +@file{/nix/store/xxx-gcc-4.7.2/bin/gcc}; on the same machine, @code{bob} +may have installed GCC 4.8.0, in which case its profile refers to these +particular package installation. Both coexist, without any +interference. + +The @command{guix-package} command is the central tool to manage +packages. It operates on those per-user profiles, and can be used +@emph{with normal user privileges}. + +The command provides the obvious install, remove, and upgrade +operations. Each invocation is actually a @emph{transaction}: either +the specified operations succeed, or nothing happens. Thus, if the +@command{guix-package} processed is terminated during the transaction, +or if a power outage occurs during the transaction, then the user's +profile remains in its previous state, and remains usable. + +In addition, any package transaction may be @emph{rolled back}. So, if, +for example, an upgrade installs a new version of a package that turns +out to have a serious bug, users may roll back to the previous instance +of their profile, which was known to work well. + +All those packages in the package store may be @emph{garbage-collected}. +Guix can determine which packages are still referenced by the user +profiles, and remove those that are provably no longer referenced. +Users may also explicitly remove old generations of their profile so +that the packages they refer to can be collected. + +Finally, Guix takes a @dfn{purely functional} approach to package +management, as described in the introduction (@pxref{Introduction}). +Each @file{/nix/store} package directory name contains a hash of all the +inputs that were used to build that package---compiler, libraries, build +scripts, etc. This direct correspondence allows users to make sure a +given package installation matches the current state of their +distribution. + +This foundation allows Guix to support @dfn{transparent binary/source +deployment}. When a pre-built binary for a @file{/nix/store} path is +available from an external source, Guix just downloads it; otherwise, it +builds the package from source, locally. + +@node Invoking guix-package +@section Invoking @command{guix-package} + +The @command{guix-package} command it the tool that allows users to +install, upgrade, and remove packages, as well as rolling back to +previous configurations. It operates only on the user's own profile, +and works with normal user privileges (@pxref{Features}). Its syntax +is: + +@example +guix-package @var{options} +@end example + +Primarily, @var{options} specify the operations to be performed during +the transaction. Upon completion, a new profile is created, but +previous generations of the profile remain available, should the user +want to roll back. + +@table @code + +@item --install=@var{package} +@itemx -x @var{package} +Install @var{package}. + +@var{package} may specify either a simple package name, such as +@code{guile}, or a package name followed by a hyphen and version number, +such as @code{guile-1.8}. In addition, @var{package} may contain a +colon, followed by the name of one of the outputs of the package, as in +@code{gcc:doc} or @code{libsigsegv-2.10:lib}. + +@item --remove=@var{package} +@itemx -r @var{package} +Remove @var{package}. + +@item --upgrade=@var{REGEXP} +@itemx -u @var{REGEXP} +Upgrade all the installed packages matching @var{regexp}. + +@item --profile=@var{profile} +@itemx -p @var{profile} +Use @var{profile} instead of the user's default profile. + +@item --dry-run +@itemx -n +Show what would be done without actually doing it. + +@item --bootstrap +Use the bootstrap Guile to build the profile. This option is only +useful to distribution developers. + +@end table + + + + + @c ********************************************************************* @node Programming Interface @chapter Programming Interface