Next: Invoking guix style
, Previous: Invocación de guix import
, Up: Utilidades [Contents][Index]
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 …
If for some reason you don’t want to update to the latest version, you can update to a specific version by appending an equal sign and the desired version number to the package specification. Note that not all updaters support this; an error is reported when an updater cannot refresh to the specified version.
$ guix refresh trytond-party gnu/packages/guile.scm:392:2: guile would be upgraded from 3.0.3 to 3.0.5 $ guix refresh -u guile=3.0.4 … gnu/packages/guile.scm:392:2: guile: updating from version 3.0.3 to version 3.0.4... … $ guix refresh -u guile@2.0=2.0.12 … gnu/packages/guile.scm:147:2: guile: updating from version 2.0.10 to version 2.0.12... …
In some specific cases, you may have many packages specified via a manifest or a module selection which should all be updated together; for these cases, the --target-version option can be provided to have them all refreshed to the same version, as shown in the examples below:
$ guix refresh qtbase qtdeclarative --target-version=6.5.2 gnu/packages/qt.scm:1248:13: qtdeclarative would be upgraded from 6.3.2 to 6.5.2 gnu/packages/qt.scm:584:2: qtbase would be upgraded from 6.3.2 to 6.5.2
$ guix refresh --manifest=qt5-manifest.scm --target-version=5.15.10 gnu/packages/qt.scm:1173:13: qtxmlpatterns would be upgraded from 5.15.8 to 5.15.10 gnu/packages/qt.scm:1202:13: qtdeclarative would be upgraded from 5.15.8 to 5.15.10 gnu/packages/qt.scm:1762:13: qtserialbus would be upgraded from 5.15.8 to 5.15.10 gnu/packages/qt.scm:2070:13: qtquickcontrols2 would be upgraded from 5.15.8 to 5.15.10 …
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")))))
When passed --update, it modifies distribution source files to
update the version numbers and source code hashes of those package
definitions, as well as possibly their inputs (see Definición de paquetes).
This is achieved by downloading each package’s latest source tarball and its
associated OpenPGP signature, authenticating the downloaded tarball against
its signature using gpgv
, and finally computing its hash—note
that GnuPG must be installed and in $PATH
; run guix install
gnupg
if needed.
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
Update distribution source files (package definitions) in place. This is usually run from a checkout of the Guix source tree (see Ejecución de Guix antes de estar instalado):
./pre-inst-env guix refresh -s non-core -u
See Definición de paquetes, for more information on package definitions. You can also run it on packages from a third-party channel:
guix refresh -L /path/to/channel -u package
See Creación de un canal, on how to create a channel.
This command updates the version and source code hash of the package. Depending on the updater being used, it can also update the various ‘inputs’ fields of the package. In some cases, the updater might get inputs wrong—it might not know about an extra input that’s necessary, or it might add an input that should be avoided.
To address that, packagers can add properties stating inputs that should be
added to those found by the updater or inputs that should be ignored: the
updater-extra-inputs
and updater-ignored-inputs
properties
pertain to “regular” inputs, and there are equivalent properties for
‘native’ and ‘propagated’ inputs. In the example below, we tell
the updater that we need ‘openmpi’ as an additional input:
(define-public python-mpi4py
(package
(name "python-mpi4py")
;; …
(inputs (list openmpi))
(properties
'((updater-extra-inputs . ("openmpi"))))))
That way, guix refresh -u python-mpi4py
will leave the
‘openmpi’ input, even if it is not among the inputs it would normally
add.
--select=[subconjunto]
-s subconjunto
Select all the packages in subset, one of core
, non-core
or module:name
.
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.
The module:name
subset refers to all the packages in a
specified guile module. The module can be specified as module:guile
or module:(gnu packages guile)
, the former is a shorthand for the
later.
--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, or the HTML page specified by the
release-monitoring-url
property of the package.
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
-T
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]