Next: Invocación de guix challenge
, Previous: Invocación de guix graph
, Up: Utilidades [Contents][Index]
guix publish
El propósito de guix publish
es permitir a las usuarias compartir
fácilmente su almacén con otras, quienes pueden usarlo como servidor de
sustituciones (see Sustituciones).
When guix publish
runs, it spawns an HTTP server which allows
anyone with network access to obtain substitutes from it. This means that
any machine running Guix can also act as if it were a build farm, since the
HTTP interface is compatible with Cuirass, the software behind the
ci.guix.gnu.org
build farm.
Por seguridad, cada sustitución se firma, permitiendo a las receptoras
comprobar su autenticidad e integridad (see Sustituciones). Debido a que
guix publish
usa la clave de firma del sistema, que es únicamente
legible por la administradora del sistema, debe iniciarse como root; la
opción --user hace que renuncie a sus privilegios tan pronto como
sea posible.
El par claves de firma debe generarse antes de ejecutar guix
publish
, usando guix archive --generate-key
(see Invocación de guix archive
).
When the --advertise option is passed, the server advertises its availability on the local network using multicast DNS (mDNS) and DNS service discovery (DNS-SD), currently via Guile-Avahi (see Using Avahi in Guile Scheme Programs).
La sintaxis general es:
guix publish opciones…
La ejecución de guix publish
sin ningún parámetro adicional
lanzará un servidor HTTP en el puerto 8080:
guix publish
guix publish
can also be started following the systemd “socket
activation” protocol (see make-systemd-constructor
in The GNU Shepherd Manual).
Una vez el servidor de publicación ha sido autorizado, el daemon puede descargar sustituciones de él. See Obtención de sustiticiones desde otros servidores.
Por defecto, guix publish
comprime los archivos al vuelo cuando es
necesario. Este modo “al vuelo” es conveniente ya que no necesita
configuración y está disponible inmediatamente. No obstante, cuando se
proporciona servicio a muchos clientes, se recomienda usar la opción
--cache, que activa el almacenamiento en caché de los archivos
antes de enviarlos a los clientes—véase a continuación para más
detalles. La orden guix weather
proporciona una forma fácil de
comprobar lo que proporciona un servidor (see Invocación de guix weather
).
Además guix publish
también sirve como un espejo de acceso por
contenido a archivos de fuentes a los que los registros origin
hacen
referencia (see Referencia de origin
). Por ejemplo, si asumimos que
guix publish
se ejecuta en example.org
, la siguiente URL
devuelve directamente el archivo hello-2.10.tar.gz con el hash SHA256
proporcionado (representado en formato nix-base32
, see Invocación de guix hash
).
http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1…ndq1i
Obviamente estas URL funcionan solamente para archivos que se encuentran en el almacén; en otros casos devuelven un 404 (“No encontrado”).
Los log de construcción están disponibles desde URL /log
como:
http://example.org/log/gwspk…-guile-2.2.3
Cuando guix-daemon
está configurado para almacenar comprimidos los
log de construcción, como sucede de forma predeterminada (see Invocación de guix-daemon
), las URL /log
devuelven los log igualmente comprimidos,
con un Content-Type
adecuado y/o una cabecera
Content-Encoding
. Recomendamos ejecutar guix-daemon
con
--log-compression=gzip ya que los navegadores Web pueden extraer el
contenido automáticamente, lo cual no es el caso con la compresión bzip2.
Las siguientes opciones están disponibles:
--port=puerto
-p puerto
Escucha peticiones HTTP en puerto.
--listen=dirección
Escucha en la interfaz de red de la dirección. El comportamiento predeterminado es aceptar conexiones de cualquier interfaz.
--user=usuaria
-u usuaria
Cambia los privilegios a los de usuaria tan pronto como sea posible—es decir, una vez el socket del servidor esté abierto y la clave de firma haya sido leída.
--compression[=método[:nivel]]
-C [método[:nivel]]
Compress data using the given method and level. method is
one of lzip
, zstd
, and gzip
; when method is
omitted, gzip
is used.
Cuando el nivel es cero, desactiva la compresión. El rango 1 a 9 corresponde a distintos niveles de compresión gzip: 1 es el más rápido, y 9 es el mejor (intensivo a nivel de CPU). El valor predeterminado es 3.
Usually, lzip
compresses noticeably better than gzip
for a
small increase in CPU usage; see
benchmarks on the lzip Web
page. However, lzip
achieves low decompression throughput (on the
order of 50 MiB/s on modern hardware), which can be a bottleneck for
someone who downloads over a fast network connection.
The compression ratio of zstd
is between that of lzip
and that
of gzip
; its main advantage is a
high decompression speed.
A menos que se use --cache, la compresión ocurre al vuelo y los
flujos comprimidos no se almacenan en caché. Por tanto, para reducir la
carga en la máquina que ejecuta guix publish
, puede ser una buena
idea elegir un nivel de compresión bajo, ejecutar guix publish
detrás de una pasarela con caché o usar --cache. El uso de
--cache tiene la ventaja de que permite a guix publish
añadir la cabecera HTTP Content-Length
a sus respuestas.
Se puede repetir esta opción, en cuyo caso cada sustitución se comprime usando todos los métodos seleccionados, y todos son anunciados. Esto es útil cuando las usuarias pueden no implementar todos los métodos de compresión: pueden seleccionar el que implementan.
--cache=directorio
-c directorio
Almacena en caché los archivos y metadatos (URL .narinfo
) en
directorio y únicamente proporciona archivos que están en la caché.
Cuando se omite esta opción, los archivos y metadatos se crean al
vuelo. Esto puede reducir el ancho de banda disponible, especialmente cuando
la compresión está activa, ya que se puede llegar al límite de la CPU. Otra
desventaja del modo predeterminado es que la longitud de los archivos no se
conoce con anterioridad, por lo que guix publish
no puede añadir
la cabecera HTTP Content-Length
a sus respuestas, lo que a su vez
previene que los clientes conozcan la cantidad de datos a descargar.
De manera contraria, cuando se usa --cache, la primera petición de
un elemento del almacén (a través de una URL .narinfo
) inicia un
proceso en segundo plano para cocinar el archivo—calcular su
.narinfo
y comprimirlo, en caso necesario. Una vez el archivo está
alojado en la caché de directorio, las siguientes peticiones obtendrán
un resultado satisfactorio y se ofrecerá el contenido directamente desde la
caché, lo que garantiza que los clientes obtienen el mejor ancho de banda
posible.
La primera petción de .narinfo
devuelve no obstante el código 200, en
el caso de que el elemento del almacén sea “lo suficientemente pequeño”,
es decir que su tamaño sea inferior al límite de bajo el que se ignora la
caché—véase la opción --cache-bypass-threshold a continuación. De
este modo, los clientes no deben esperar hasta que el archivo se haya
cocinado. Con elementos del almacén de mayor tamaño la primera petición
.narinfo
devuelve el código 404, lo que significa que los clientes
deben esperar hasta que el archivo se haya cocinado.
El proceso de “cocinado” se realiza por hilos de trabajo. Por defecto, se crea un hilo por núcleo de la CPU, pero puede ser personalizado. Véase --workers a continuación.
Cuando se usa --ttl, las entradas en caché se borran automáticamente cuando hayan expirado.
--workers=N
Cuando se usa --cache, solicita la creación de N hilos de trabajo para “cocinar” archivos.
--ttl=ttl
Produce cabeceras HTTP Cache-Control
que anuncian un tiempo-de-vida
(TTL) de ttl. ttl debe indicar una duración: 5d
significa
5 días, 1m
significa un mes, etc.
Esto permite a la usuaria de Guix mantener información de sustituciones en
la caché durante ttl. No obstante, fíjese que guix publish
no
garantiza en sí que los elementos del almacén que proporciona de hecho
permanezcan disponibles hasta que ttl expire.
Adicionalmente, cuando se usa --cache, las entradas en caché que no hayan sido accedidas en ttl y no tengan un elemento correspondiente en el almacén pueden ser borradas.
--negative-ttl=ttl
Similarly produce Cache-Control
HTTP headers to advertise the
time-to-live (TTL) of negative lookups—missing store items, for
which the HTTP 404 code is returned. By default, no negative TTL is
advertised.
This parameter can help adjust server load and substitute latency by instructing cooperating clients to be more or less patient when a store item is missing.
--cache-bypass-threshold=tamaño
Cuando se usa en conjunto con la opción --cache, los elementos del
almacén cuyo tamaño sea inferior a tamaño están disponibles de manera
inmediata, incluso cuando no están todavía en la caché. tamaño es el
número de bytes, o se puedem usar sufijos como M
para megabytes,
etcétera. El valor predeterminado es 10M
.
La opción de omisión de la cache le permite reducir la latencia de publicación a los clientes a expensas de un posible incremento en el uso de E/S y procesador en el lado del servidor: dependiendo de los patrones de acceso de los clientes, dichos elementos del almacén pueden ser cocinados varias veces hasta que una copia se encuentre disponible en la caché.
Incrementar el valor límite puede ser útil para servidores que tengan pocas usuarias, o para garantizar que dichas usuarias obtienen sustituciones incluso con elementos del almacén que no son populares.
--nar-path=ruta
Usa ruta como el prefijo para las URL de los archivos “nar” (see archivadores normalizados).
Por defecto, los archivos nar se proporcionan en una URL como
/nar/gzip/…-coreutils-8.25
. Esta opción le permite cambiar la
parte /nar
por ruta.
--public-key=archivo
--private-key=archivo
Usa los archivos específicos como el par de claves pública y privada usadas para firmar los elementos del almacén publicados.
Los archivos deben corresponder al mismo par de claves (la clave privada se
usa para la firma y la clave pública simplemente se anuncia en los metadatos
de la firma). Deben contener claves en el formato canónico de expresiones-S
como el producido por guix archive --generate-key
(see Invocación de guix archive
). Por defecto, se usan /etc/guix/signing-key.pub y
/etc/guix/signing-key.sec.
--repl[=puerto]
-r [puerto]
Lanza un servidor REPL Guile (see REPL Servers in GNU Guile
Reference Manual) en puerto (37146 por defecto). Esto se usa
principalmente para la depuración de un servidor guix publish
en
ejecución.
Activar guix publish
en el sistema Guix consiste en solo una
línea: simplemente instancie un servicio guix-publish-service-type
en
el campo services
de su declaración del sistema operativo
operating-system
(see guix-publish-service-type
)
Si en vez de eso ejecuta Guix en una distribución distinta, siga estas instrucciones:
# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \ /etc/systemd/system/ # systemctl start guix-publish && systemctl enable guix-publish
# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/ # start guix-publish
Next: Invocación de guix challenge
, Previous: Invocación de guix graph
, Up: Utilidades [Contents][Index]