Next: Sustituciones, Previous: Características, Up: Gestión de paquetes [Contents][Index]
guix package
The guix package
command is the tool that allows users to install,
upgrade, and remove packages, as well as rolling back to previous
configurations. These operations work on a user profile—a directory
of installed packages. Each user has a default profile in
$HOME/.guix-profile. The command operates only on the user’s own
profile, and works with normal user privileges (see Características). Its
syntax is:
guix package opciones
Primariamente, opciones especifica las operaciones a ser realizadas durante la transacción. Al completarse, un nuevo perfil es creado, pero las generaciones previas del perfil permanecen disponibles, en caso de que la usuaria quisiera volver atrás.
Por ejemplo, para borrar lua
e instalar guile
y
guile-cairo
en una única transacción:
guix package -r lua -i guile guile-cairo
Para su conveniencia, también se proporcionan los siguientes alias:
guix search
es un alias de guix package -s
,
guix install
es un alias de guix package -i
,
guix remove
es un alias de guix package -r
,
guix upgrade
es un alias de guix package -u
guix show
es un alias de guix package --show=
.
Estos alias tienen menos capacidad expresiva que guix package
y
proporcionan menos opciones, por lo que en algunos casos es probable que
desee usar guix package
directamente.
guix package
también proporciona una aproximación
declarativa, donde la usuaria especifica el conjunto exacto de paquetes a
poner disponibles y la pasa a través de la opción --manifest
(see --manifest).
Para cada usuaria, un enlace simbólico al perfil predeterminado de la
usuaria es creado en $HOME/.guix-profile. Este enlace simbólico
siempre apunta a la generación actual del perfil predeterminado de la
usuaria. Por lo tanto, las usuarias pueden añadir
$HOME/.guix-profile/bin a su variable de entorno PATH
,
etcétera.
Si no está usando el sistema Guix, considere la adición de las siguientes
líneas en su ~/.bash_profile (see Bash Startup Files in The
GNU Bash Reference Manual) de manera que los nuevos intérpretes que ejecute
obtengan todas las definiciones correctas de las variables de entorno:
GUIX_PROFILE="$HOME/.guix-profile" ; \ source "$GUIX_PROFILE/etc/profile"
En una configuración multiusuaria, los perfiles de usuaria se almacenan en
un lugar registrado como una raíz del sistema de archivos, a la que
apunta $HOME/.guix-profile (see Invocación de guix gc
). Ese directorio
normalmente es
localstatedir/guix/profiles/per-user/usuaria
, donde
localstatedir es el valor pasado a configure
como
--localstatedir y usuaria es el nombre de usuaria. El
directorio per-user se crea cuando se lanza guix-daemon
, y
el subdirectorio usuaria es creado por guix package
.
Las opciones pueden ser las siguientes:
--install=paquete …
-i paquete …
Instala los paquetes especificados.
Each package may specify a simple package name, such as guile
,
optionally followed by an at-sign and version number, such as
guile@3.0.7
or simply guile@3.0
. In the latter case, the
newest version prefixed by 3.0
is selected.
If no version number is specified, the newest available version will be
selected. In addition, such a package specification may contain a
colon, followed by the name of one of the outputs of the package, as in
gcc:doc
or binutils@2.22:lib
(see Paquetes con múltiples salidas).
Packages with a corresponding name (and optionally version) are searched for among the GNU distribution modules (see Módulos de paquetes).
Alternatively, a package can directly specify a store file name such
as /gnu/store/...-guile-3.0.7, as produced by, e.g., guix
build
.
A veces los paquetes tienen entradas propagadas: estas son las
dependencias que se instalan automáticamente junto al paquete requerido
(see propagated-inputs
in
package
objects, para información sobre las entradas propagadas en
las definiciones de paquete).
Un ejemplo es la biblioteca GNU MPC: sus archivos de cabecera C hacen referencia a los de la biblioteca GNU MPFR, que a su vez hacen referencia a los de la biblioteca GMP. Por tanto, cuando se instala MPC, las bibliotecas MPFR y GMP también se instalan en el perfil; borrar MPC también borra MPFR y GMP—a menos que también se hayan instalado explícitamente por la usuaria.
Por otra parte, los paquetes a veces dependen de la definición de variables de entorno para sus rutas de búsqueda (véase a continuación la explicación de --seach-paths). Cualquier definición de variable de entorno que falte o sea posiblemente incorrecta se informa aquí.
--install-from-expression=exp
-e exp
Instala el paquete al que exp evalúa.
exp debe ser una expresión Scheme que evalúe a un objeto
<package>
. Esta opción es notablemente útil para diferenciar entre
variantes con el mismo nombre de paquete, con expresiones como (@
(gnu packages base) guile-final)
.
Fíjese que esta opción instala la primera salida del paquete especificado, lo cual puede ser insuficiente cuando se necesita una salida específica de un paquete con múltiples salidas.
--install-from-file=archivo
-f archivo
Instala el paquete que resulta de evaluar el código en archivo.
Como un ejemplo, archivo puede contener una definición como esta (see Definición de paquetes):
(use-modules (guix) (guix build-system gnu) (guix licenses)) (package (name "hello") (version "2.10") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/hello/hello-" version ".tar.gz")) (sha256 (base32 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) (build-system gnu-build-system) (synopsis "Hello, GNU world: An example GNU package") (description "Guess what GNU Hello prints!") (home-page "http://www.gnu.org/software/hello/") (license gpl3+))
Developers may find it useful to include such a guix.scm file in the
root of their project source tree that can be used to test development
snapshots and create reproducible development environments (see Invoking guix shell
).
El archivo puede contener también una representación en JSON de una o
más definiciones de paquetes. Ejecutar guix package -f
en
hello.json con el contenido mostrado a continuación provocará la
instalación del paquete greeter
tras la construcción de
myhello
:
[ { "name": "myhello", "version": "2.10", "source": "mirror://gnu/hello/hello-2.10.tar.gz", "build-system": "gnu", "arguments": { "tests?": false } "home-page": "https://www.gnu.org/software/hello/", "synopsis": "Hello, GNU world: An example GNU package", "description": "GNU Hello prints a greeting.", "license": "GPL-3.0+", "native-inputs": ["gettext"] }, { "name": "greeter", "version": "1.0", "source": "https://example.com/greeter-1.0.tar.gz", "build-system": "gnu", "arguments": { "test-target": "foo", "parallel-build?": false, }, "home-page": "https://example.com/", "synopsis": "Greeter using GNU Hello", "description": "This is a wrapper around GNU Hello.", "license": "GPL-3.0+", "inputs": ["myhello", "hello"] } ]
--remove=paquete …
-r paquete …
Borra los paquetes especificados.
Como en --install, cada paquete puede especificar un número
de versión y/o un nombre de salida además del nombre del paquete. Por
ejemplo, -r glibc:debug
eliminaría la salida debug
de
glibc
.
--upgrade[=regexp …]
¶-u [regexp …]
Actualiza todos los paquetes instalados. Si se especifica una o más expresiones regular regexp, actualiza únicamente los paquetes instalados cuyo nombre es aceptado por regexp. Véase también la opción --do-not-upgrade más adelante.
Tenga en cuenta que esto actualiza los paquetes a la última versión
encontrada en la distribución instalada actualmente. Para actualizar su
distribución, debe ejecutar regularmente guix pull
(see Invocación de guix pull
).
Al actualizar, las transformaciones que se aplicaron originalmente al crear el perfil se aplican de nuevo de manera automática (see Opciones de transformación de paquetes). Por ejemplo, asumiendo que hubiese instalado Emacs a partir de la última revisión de su rama de desarrollo con:
guix install emacs-next --with-branch=emacs-next=master
La próxima vez que ejecute guix upgrade
Guix obtendrá de nuevo la
última revisión de la rama de desarrollo de Emacs y construirá
emacs-next
a partir de ese código.
Tenga en cuenta que las opciones de transformación, como por ejemplo --with-branch y --with-source, dependen de un estado externo; es su responsabilidad asegurarse de que funcionen de la manera esperada. También puede deshacer las transformaciones aplicadas a un paquete con la siguiente orden:
guix install paquete
--do-not-upgrade[=regexp …]
Cuando se usa junto a la opción --upgrade, no actualiza ningún paquete cuyo nombre sea aceptado por regexp. Por ejemplo, para actualizar todos los paquetes en el perfil actual excepto aquellos que contengan la cadena “emacs”:
$ guix package --upgrade . --do-not-upgrade emacs
--manifest=archivo
¶-m archivo
Crea una nueva generación del perfil desde el objeto de manifiesto devuelto por el código Scheme en archivo. Esta opción puede repetirse varias veces, en cuyo caso los manifiestos se concatenan.
Esto le permite declarar los contenidos del perfil en vez de construirlo a través de una secuencia de --install y órdenes similares. La ventaja es que archivo puede ponerse bajo control de versiones, copiarse a máquinas diferentes para reproducir el mismo perfil, y demás.
archivo debe devolver un objeto manifest, que es básicamente una lista de paquetes:
(use-package-modules guile emacs) (packages->manifest (list emacs guile-2.0 ;; Usa una salida específica del paquete. (list guile-2.0 "debug")))
See Writing Manifests, for information on how to write a manifest. See --export-manifest, to learn how to obtain a manifest file from an existing profile.
--roll-back
¶Vuelve a la generación previa del perfil—es decir, revierte la última transacción.
Cuando se combina con opciones como --install, la reversión atrás ocurre antes que cualquier acción.
Cuando se vuelve atrás en la primera generación que realmente contiene paquetes instalados, se hace que el perfil apunte a la generación cero, la cual no contiene ningún archivo a excepción de sus propios metadatos.
Después de haber vuelto atrás, instalar, borrar o actualizar paquetes sobreescribe las generaciones futuras previas. Por tanto, la historia de las generaciones en un perfil es siempre linear.
--switch-generation=patrón
¶-S patrón
Cambia a una generación particular definida por el patrón.
patrón puede ser tanto un número de generación como un número prefijado con “+” o “-”. Esto último significa: mueve atrás/hacia delante el número especificado de generaciones. Por ejemplo, si quiere volver a la última generación antes de --roll-back, use --switch-generation=+1.
La diferencia entre --roll-back y --switch-generation=-1 es que --switch-generation no creará una generación cero, así que si la generación especificada no existe, la generación actual no se verá cambiada.
--search-paths[=tipo]
¶Informa de variables de entorno, en sintaxis Bash, que pueden necesitarse para usar el conjunto de paquetes instalado. Estas variables de entorno se usan para especificar las rutas de búsqueda para archivos usadas por algunos de los paquetes.
For example, GCC needs the CPATH
and LIBRARY_PATH
environment
variables to be defined so it can look for headers and libraries in the
user’s profile (see Environment Variables in Using the GNU Compiler
Collection (GCC)). If GCC and, say, the C library are installed in the
profile, then --search-paths will suggest setting these variables
to profile/include and profile/lib, respectively
(see Search Paths, for info on search path specifications associated
with packages.)
El caso de uso típico es para definir estas variables de entorno en el intérprete de consola:
$ eval $(guix package --search-paths)
tipo puede ser exact
, prefix
o suffix
, lo que
significa que las definiciones de variables de entorno devueltas serán
respectivamente las configuraciones exactas, prefijos o sufijos del valor
actual de dichas variables. Cuando se omite, el valor predeterminado de
tipo es exact
.
Esta opción puede usarse para calcular las rutas de búsqueda combinadas de varios perfiles. Considere este ejemplo:
$ guix package -p foo -i guile $ guix package -p bar -i guile-json $ guix package -p foo -p bar --search-paths
La última orden informa sobre la variable GUILE_LOAD_PATH
, aunque,
tomada individualmente, ni foo ni bar hubieran llevado a esa
recomendación.
--profile=perfil
-p perfil
Usa perfil en vez del perfil predeterminado de la usuaria.
perfil debe ser el nombre de un archivo que se creará tras completar las tareas. Concretamente, perfil sera simplemente un enlace simbólico (“symlink”) que apunta al verdadero perfil en el que se instalan los paquetes:
$ guix install hello -p ~/código/mi-perfil … $ ~/código/mi-perfil/bin/hello ¡Hola mundo!
Todo lo necesario para deshacerse del perfil es borrar dicho enlace simbólico y sus enlaces relacionados que apuntan a generaciones específicas:
$ rm ~/código/mi-perfil ~/código/mi-perfil-*-link
--list-profiles
Enumera los perfiles de la usuaria:
$ guix package --list-profiles /home/carlos/.guix-profile /home/carlos/código/mi-perfil /home/carlos/código/perfil-desarrollo /home/carlos/tmp/prueba
Cuando se ejecuta como root, enumera todos los perfiles de todas las usuarias.
--allow-collisions
Permite colisiones de paquetes en el nuevo perfil. ¡Úselo bajo su propio riesgo!
Por defecto, guix package
informa como un error las
colisiones en el perfil. Las colisiones ocurren cuando dos o más
versiones diferentes o variantes de un paquete dado se han seleccionado para
el perfil.
--bootstrap
Use el Guile usado para el lanzamiento para construir el perfil. Esta opción es util únicamente a las desarrolladoras de la distribución.
Además de estas acciones, guix package
acepta las siguientes
opciones para consultar el estado actual de un perfil, o la disponibilidad
de paquetes:
Enumera los paquetes disponibles cuyo nombre, sinopsis o descripción
corresponde con regexp (sin tener en cuenta la capitalización),
ordenados por relevancia. Imprime todos los metadatos de los paquetes
coincidentes en formato recutils
(see GNU recutils
databases in GNU recutils manual).
Esto permite extraer campos específicos usando la orden recsel
,
por ejemplo:
$ guix package -s malloc | recsel -p name,version,relevance name: jemalloc version: 4.5.0 relevance: 6 name: glibc version: 2.25 relevance: 1 name: libgc version: 7.6.0 relevance: 1
De manera similar, para mostrar el nombre de todos los paquetes disponibles bajo los términos de la GNU LGPL versión 3:
$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"' name: elfutils name: gmp …
También es posible refinar los resultados de búsqueda mediante el uso de
varias opciones -s
, o varios parámetros a guix search
. Por
ejemplo, la siguiente orden devuelve un lista de juegos de
mesa12 (esta vez mediante el uso del alias
guix search
:
$ guix search '\<board\>' game | recsel -p name name: gnubg …
Si omitimos -s game
, también obtendríamos paquetes de software que
tengan que ver con placas de circuitos impresos ("circuit board" en inglés);
borrar los signos mayor y menor alrededor de board
añadiría paquetes
que tienen que ver con teclados (keyboard en inglés).
Y ahora para un ejemplo más elaborado. La siguiente orden busca bibliotecas criptográficas, descarta bibliotecas Haskell, Perl, Python y Ruby, e imprime el nombre y la sinopsis de los paquetes resultantes:
$ guix search crypto library | \ recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
See Selection Expressions in GNU recutils manual, para más
información en expresiones de selección para recsel -e
.
Muestra los detalles del paquete, tomado de la lista disponible de
paquetes, en formato recutils
(see GNU recutils databases in GNU recutils manual).
$ guix package --show=guile | recsel -p name,version name: guile version: 3.0.5 name: guile version: 3.0.2 name: guile version: 2.2.7 …
También puede especificar el nombre completo de un paquete para únicamente
obtener detalles sobre una versión específica (esta vez usando el alias
guix show
):
$ guix show guile@3.0.5 | recsel -p name,version name: guile version: 3.0.5
Enumera los paquetes actualmente instalados en el perfil especificado, con los últimos paquetes instalados mostrados al final. Cuando se especifica regexp, enumera únicamente los paquetes instalados cuyos nombres son aceptados por regexp.
Por cada paquete instalado, imprime los siguientes elementos, separados por
tabuladores: el nombre del paquete, la cadena de versión, la parte del
paquete que está instalada (por ejemplo, out
para la salida
predeterminada, include
para sus cabeceras, etc.), y la ruta de este
paquete en el almacén.
Enumera los paquetes disponibles actualmente en la distribución para este sistema (see Distribución GNU). Cuando se especifica regexp, enumera únicamente paquetes disponibles cuyo nombre coincide con regexp.
Por cada paquete, imprime los siguientes elementos separados por tabuladores: su nombre, su cadena de versión, las partes del paquete (see Paquetes con múltiples salidas) y la dirección de las fuentes de su definición.
Devuelve una lista de generaciones junto a sus fechas de creación; para cada generación, muestra los paquetes instalados, con los paquetes instalados más recientemente mostrados los últimos. Fíjese que la generación cero nunca se muestra.
Por cada paquete instalado, imprime los siguientes elementos, separados por tabuladores: el nombre de un paquete, su cadena de versión, la parte del paquete que está instalada (see Paquetes con múltiples salidas), y la ruta de este paquete en el almacén.
Cuando se usa patrón, la orden devuelve únicamente las generaciones que se ajustan al patrón. Entre los patrones adecuados se encuentran:
Y --list-generations=1,8,2 devuelve las tres generaciones en el orden especificado. No se permiten ni espacios ni una coma al final.
También es posible omitir el destino final. Por ejemplo, --list-generations=2.. devuelve todas las generaciones empezando por la segunda.
Cuando se omite patrón, borra todas las generaciones excepto la actual.
Esta orden acepta los mismos patrones que --list-generations. Cuando se especifica un patrón, borra las generaciones coincidentes. Cuando el patrón especifica una duración, las generaciones más antiguas que la duración especificada son las borradas. Por ejemplo, --delete-generations=1m borra las generaciones de más de un mes de antigüedad.
Si la generación actual entra en el patrón, no es borrada. Tampoco la generación cero es borrada nunca.
Preste atención a que el borrado de generaciones previas impide la reversión a su estado. Consecuentemente esta orden debe ser usada con cuidado.
Write to standard output a manifest suitable for --manifest corresponding to the chosen profile(s).
This option is meant to help you migrate from the “imperative” operating
mode—running guix install
, guix upgrade
, etc.—to the
declarative mode that --manifest offers.
Be aware that the resulting manifest approximates what your profile actually contains; for instance, depending on how your profile was created, it can refer to packages or package versions that are not exactly what you specified.
Keep in mind that a manifest is purely symbolic: it only contains package names and possibly versions, and their meaning varies over time. If you wish to “pin” channels to the revisions that were used to build the profile(s), see --export-channels below.
Write to standard output the list of channels used by the chosen profile(s),
in a format suitable for guix pull --channels
or guix
time-machine --channels
(see Canales).
Together with --export-manifest, this option provides information allowing you to replicate the current profile (see Replicación de Guix).
However, note that the output of this command approximates what was actually used to build this profile. In particular, a single profile might have been built from several different revisions of the same channel. In that case, --export-manifest chooses the last one and writes the list of other revisions in a comment. If you really need to pick packages from different channel revisions, you can use inferiors in your manifest to do so (see Inferiores).
Together with --export-manifest, this is a good starting point if you are willing to migrate from the “imperative” model to the fully declarative model consisting of a manifest file along with a channels file pinning the exact channel revision(s) you want.
Finally, since guix package
may actually start build processes, it
supports all the common build options (see Opciones comunes de construcción). It
also supports package transformation options, such as
--with-source, and preserves them across upgrades (see Opciones de transformación de paquetes).
Next: Sustituciones, Previous: Características, Up: Gestión de paquetes [Contents][Index]