Next: , Previous: , Up: Utilidades   [Contents][Index]


10.6 Invocación de guix refresh

The primary audience of the guix refresh command is packagers. As a user, you may be interested in the --with-latest option, which can bring you package update superpowers built upon guix refresh (see --with-latest). By default, guix refresh reports any packages provided by the distribution that are outdated compared to the latest upstream version, like this:

$ guix refresh
gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0

De manera alternativa, se pueden especificar los paquetes a considerar, en cuyo caso se emite un aviso para paquetes que carezcan de actualizador:

$ guix refresh coreutils guile guile-ssh
gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13

guix refresh navega por los repositorios oficiales de cada paquete y determina el número de versión mayor entre las publicaciones encontradas. La orden sabe cómo actualizar tipos específicos de paquetes: paquetes GNU, paquetes ELPA, etc.—vea la documentación de --type más adelante. Hay muchos paquetes, no obstante, para los que carece de un método para determinar si está disponible una versión oficial posterior. No obstante, el mecanismo es extensible, ¡no tenga problema en contactar con nosotras para añadir un método nuevo!

--recursive

Considera los paquetes especificados, y todos los paquetes de los que dependen.

$ guix refresh --recursive coreutils
gnu/packages/acl.scm:40:13: acl would be upgraded from 2.2.53 to 2.3.1
gnu/packages/m4.scm:30:12: 1.4.18 is already the latest version of m4
gnu/packages/xml.scm:68:2: warning: no updater for expat
gnu/packages/multiprecision.scm:40:12: 6.1.2 is already the latest version of gmp
…

A veces el nombre oficial es diferente al nombre de paquete usado en Guix, y guix refresh necesita un poco de ayuda. La mayor parte de los actualizadores utilizan la propiedad upstream-name en las definiciones de paquetes, que puede usarse para obtener dicho efecto:

(define-public network-manager
  (package
    (name "network-manager")
    ;; …
    (properties '((upstream-name . "NetworkManager")))))

Cuando se proporciona --update, modifica los archivos de fuentes de la distribución para actualizar los números de versión y hash de los archivadores tar de fuentes en las recetas de los paquetes (see Definición de paquetes). Esto se consigue con la descarga del último archivador de fuentes del paquete y su firma OpenPGP asociada, seguida de la verificación del archivador descargado y su firma mediante el uso de gpg, y finalmente con el cálculo de su hash—tenga en cuenta que GnuPG debe estar instalado y en $PATH; ejecute guix install gnupg si es necesario.

Cuando la clave pública usada para firmar el archivador no se encuentra en el anillo de claves de la usuaria, se intenta automáticamente su obtención desde un servidor de claves públicas; cuando se encuentra, la clave se añade al anillo de claves de la usuaria; en otro caso, guix refresh informa de un error.

Se aceptan las siguientes opciones:

--expression=expr
-e expr

Considera el paquete al que evalúa expr

Es útil para hacer una referencia precisa de un paquete concreto, como en este ejemplo:

guix refresh -l -e '(@@ (gnu packages commencement) glibc-final)'

Esta orden enumera los paquetes que dependen de la libc “final” (esencialmente todos los paquetes).

--update
-u

Actualiza los archivos fuente de la distribución (recetas de paquetes) en su lugar. Esto se ejecuta habitualmente desde una copia de trabajo del árbol de fuentes de Guix (see Ejecución de Guix antes de estar instalado):

$ ./pre-inst-env guix refresh -s non-core -u

See Definición de paquetes, para más información sobre la definición de paquetes.

--select=[subconjunto]
-s subconjunto

Selecciona todos los paquetes en subconjunto, o bien core o bien non-core.

El subconjunto core hace referencia a todos los paquetes en el núcleo de la distribución—es decir, paquetes que se usan para construir “todo lo demás”. Esto incluye GCC, libc, Binutils, Bash, etc. Habitualmente, cambiar uno de esos paquetes en la distribución conlleva la reconstrucción de todos los demás. Por tanto, esas actualizaciones son una inconveniencia para las usuarias en términos de tiempo de construcción o ancho de banda usado por la actualización.

El subconjunto non-core hace referencia a los paquetes restantes. Es típicamente útil en casos donde una actualización de paquetes básicos no sería conveniente.

--manifest=archivo
-m archivo

Select all the packages from the manifest in file. This is useful to check if any packages of the user manifest can be updated.

--type=actualizador
-t actualizador

Selecciona únicamente paquetes manejados por actualizador (puede ser una lista separada por comas de actualizadores). Actualmente, actualizador puede ser:

gnu

el actualizador de paquetes GNU;

savannah

el actualizador para paquetes alojados en Savannah;

sourceforge

the updater for packages hosted at SourceForge;

gnome

el actualizador para paquetes GNOME;

kde

el actualizador para paquetes KDE;

xorg

el actualizador para paquetes X.org;

kernel.org

el actualizador para paquetes alojados en kernel.org;

egg

the updater for Egg packages;

elpa

el actualizador para paquetes ELPA;

cran

el actualizador para paquetes CRAN;

bioconductor

el actualizador para paquetes R Bioconductor;

cpan

el actualizador para paquetes CPAN;

pypi

el actualizador para paquetes PyPI.

gem

el actualizador para paquetes RubyGems.

github

el actualizador para paquetes GitHub.

hackage

el actualizador para paquetes Hackage.

stackage

el actualizador para paquetes Stackage.

crate

el actualizador para paquetes Crates.

launchpad

el actualizador para paquetes Launchpad.

generic-html

a generic updater that crawls the HTML page where the source tarball of the package is hosted, when applicable.

generic-git

a generic updater for packages hosted on Git repositories. It tries to be smart about parsing Git tag names, but if it is not able to parse the tag name and compare tags correctly, users can define the following properties for a package.

  • release-tag-prefix: a regular expression for matching a prefix of the tag name.
  • release-tag-suffix: a regular expression for matching a suffix of the tag name.
  • release-tag-version-delimiter: a string used as the delimiter in the tag name for separating the numbers of the version.
  • accept-pre-releases: by default, the updater will ignore pre-releases; to make it also look for pre-releases, set the this property to #t.
(package
  (name "foo")
  ;; ...
  (properties
    '((release-tag-prefix . "^release0-")
      (release-tag-suffix . "[a-z]?$")
      (release-tag-version-delimiter . ":"))))

Por ejemplo, la siguiente orden únicamente comprueba actualizaciones de paquetes Emacs alojados en elpa.gnu.org y actualizaciones de paquetes CRAN:

$ guix refresh --type=elpa,cran
gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
--list-updaters

Enumera los actualizadores disponibles y finaliza (vea la opción previa --type).

Para cada actualizador, muestra la fracción de paquetes que cubre; al final muestra la fracción de paquetes cubiertos por todos estos actualizadores.

Además, guix refresh puede recibir uno o más nombres de paquetes, como en este ejemplo:

$ ./pre-inst-env guix refresh -u emacs idutils gcc@4.8

The command above specifically updates the emacs and idutils packages. The --select option would have no effect in this case. You might also want to update definitions that correspond to the packages installed in your profile:

$ ./pre-inst-env guix refresh -u \
       $(guix package --list-installed | cut -f1)

Cuando se considera la actualización de un paquete, a veces es conveniente conocer cuantos paquetes se verían afectados por la actualización y su compatibilidad debería comprobarse. Para ello la siguiente opción puede usarse cuando se proporcionan uno o más nombres de paquete a guix refresh:

--list-dependent
-l

Enumera los paquetes de nivel superior dependientes que necesitarían una reconstrucción como resultado de la actualización de uno o más paquetes.

See el tipo reverse-package de guix graph, para información sobre cómo visualizar la lista de paquetes que dependen de un paquete.

Sea consciente de que la opción --list-dependent únicamente aproxima las reconstrucciones necesarias como resultado de una actualización. Más reconstrucciones pueden ser necesarias bajo algunas circunstancias.

$ guix refresh --list-dependent flex
Building the following 120 packages would ensure 213 dependent packages are rebuilt:
hop@2.4.0 emacs-geiser@0.13 notmuch@0.18 mu@0.9.9.5 cflow@1.4 idutils@4.6 …

La orden previa enumera un conjunto de paquetes que puede ser construido para comprobar la compatibilidad con una versión actualizada del paquete flex.

--list-transitive

Enumera todos los paquetes de los que uno o más paquetes dependen.

$ guix refresh --list-transitive flex
flex@2.6.4 depends on the following 25 packages: perl@5.28.0 help2man@1.47.6
bison@3.0.5 indent@2.2.10 tar@1.30 gzip@1.9 bzip2@1.0.6 xz@5.2.4 file@5.33 …

La orden previa enumera un conjunto de paquetes que, en caso de cambiar, causarían la reconstrucción de flex.

Las siguientes opciones pueden usarse para personalizar la operación de GnuPG:

--gpg=orden

Use orden como la orden de GnuPG 2.x. Se busca orden en PATH.

--keyring=archivo

Usa archivo como el anillo de claves para claves de proveedoras. archivo debe estar en el formato keybox. Los archivos Keybox normalmente tienen un nombre terminado en .kbx y GNU Privacy Guard (GPG) puede manipular estos archivos (see kbxutil in Using the GNU Privacy Guard, para información sobre una herramienta para manipular archivos keybox).

Cuando se omite esta opción, guix refresh usa ~/.config/guix/upstream/trustedkeys.kbx como el anillo de claves para las firmas de proveedoras. Las firmas OpenPGP son comprobadas contra claves de este anillo; las claves que falten son descargadas a este anillo de claves también (véase --key-download a continuación).

Puede exportar claves de su anillo de claves GPG predeterminado en un archivo keybox usando órdenes como esta:

gpg --export rms@gnu.org | kbxutil --import-openpgp >> mianillo.kbx

Del mismo modo, puede obtener claves de un archivo keybox específico así:

gpg --no-default-keyring --keyring mianillo.kbx \
  --recv-keys 3CE464558A84FDC69DB40CFB090B11993D9AEBB5

See --keyring in Using the GNU Privacy Guard, for more information on GPG’s --keyring option.

--key-download=política

Maneja las claves no encontradas de acuerdo a la política, que puede ser una de:

always

Siempre descarga las claves OpenPGP no encontradas del servidor de claves, y las añade al anillo de claves GnuPG de la usuaria.

never

Nunca intenta descargar claves OpenPGP no encontradas. Simplemente propaga el error.

interactive

Cuando se encuentra un paquete firmado por una clave OpenPGP desconocida, pregunta a la usuaria si descargarla o no. Este es el comportamiento predeterminado.

--key-server=dirección

Use dirección como el servidor de claves OpenPGP cuando se importa una clave pública.

--load-path=directorio
-L directorio

Añade directorio al frente de la ruta de búsqueda de módulos de paquetes (see Módulos de paquetes).

Esto permite a las usuarias definir sus propios paquetes y hacerlos visibles a las herramientas de línea de órdenes.

El actualizador github usa la API de GitHub para consultar nuevas publicaciones. Cuando se usa repetidamente, por ejemplo al comprobar todos los paquetes, GitHub terminará rechazando las peticiones siguientes a través de su API. Por defecto se permiten 60 peticiones por hora a través de su API, y una actualización completa de todos los paquetes de GitHub en Guix necesita más que eso. La identificación con GitHub a través del uso de un identificador de su API (“token”) amplia esos límites. Para usar dicho identificador, establezca la variable de entorno GUIX_GITHUB_TOKEN al valor obtenido a través de https://github.com/settings/tokens o de otra manera.


Next: Invoking guix style, Previous: Invocación de guix import, Up: Utilidades   [Contents][Index]