Próximo: , Anterior: , Acima: Instalação   [Conteúdo][Índice]


2.3 Invocando guix-daemon

O programa guix-daemon implementa todas as funcionalidades para acessar o armazém. Isso inclui iniciar processos de compilação, executar o coletor de lixo, consultar a disponibilidade de um resultado da compilação etc. É normalmente executado como root, assim:

# guix-daemon --build-users-group=guixbuild

Este daemon também pode ser iniciado seguindo o protocolo de “ativação de soquete” do systemd (veja make-systemd-constructor em The GNU Shepherd Manual).

Para detalhes sobre como configurá-lo, veja Configurando o daemon.

Por padrão, guix-daemon inicia processos de compilação sob diferentes UIDs, obtidos do grupo de compilação especificado com --build-users-group. Além disso, cada processo de compilação é executado em um ambiente chroot que contém apenas o subconjunto do armazém do qual o processo de compilação depende, conforme especificado por sua derivação (veja derivação), mais um conjunto de diretórios de sistema específicos. Por padrão, o último contém /dev e /dev/pts. Além disso, no GNU/Linux, o ambiente de compilação é um container: além de ter sua própria árvore de sistema de arquivos, ele tem um espaço de nome de montagem separado, seu próprio espaço de nome PID, espaço de nome de rede, etc. Isso ajuda a obter compilações reproduzíveis (veja Recursos).

Quando o daemon executa uma compilação em nome do usuário, ele cria um diretório de compilação em /tmp ou no diretório especificado por sua variável de ambiente TMPDIR. Esse diretório é compartilhado com o contêiner durante a compilação, embora dentro do contêiner, a árvore de compilação seja sempre chamada de /tmp/guix-build-name.drv-0.

O diretório de compilação é excluído automaticamente após a conclusão, a menos que a compilação falhe e o cliente tenha especificado --keep-failed (veja --keep-failed).

O daemon escuta conexões e gera um subprocesso para cada sessão iniciada por um cliente (um dos subcomandos guix). O comando guix processes permite que você tenha uma visão geral da atividade no seu sistema visualizando cada uma das sessões e clientes ativos. Veja Invocando guix processes, para mais informações.

As seguintes opções de linha de comando são suportadas:

--build-users-group=grupo

Obtém os usuários do grupo para executar os processos de compilação (veja usuários de compilação).

--no-substitutes

Não use substitutos para compilar produtos. Ou seja, sempre crie coisas localmente, em vez de permitir downloads de binários pré-compilados (veja Substitutos).

Quando o daemon é executado com --no-substitutes, os clientes ainda podem habilitar explicitamente a substituição por meio da chamada de procedimento remoto set-build-options (veja O armazém).

--substitute-urls=urls

Consider urls the default whitespace-separated list of substitute source URLs. When this option is omitted, ‘https://bordeaux.guix.gnu.org https://ci.guix.gnu.org’ is used.

Isso significa que os substitutos podem ser baixados de urls, desde que assinados por uma assinatura confiável (veja Substitutos).

Veja Obtendo substitutos de outros servidores, para mais informações sobre como configurar o daemon para obter substitutos de outros servidores.

--no-offload

Não use compilações de offload para outras máquinas (veja Usando o recurso de descarregamento). Ou seja, sempre compile as coisas localmente em vez de descarregar compilações para máquinas remotas.

--cache-failures

Armazena em cache as compilações que falharam. Por padrão, apenas compilações bem-sucedidas são armazenadas em cache.

Quando essa opção é usada, o guix gc --list-failures pode ser usado para consultar o conjunto de itens do armazém marcados como com falha; O guix gc --clear-failures remove os itens do armazém do conjunto de falhas em cache. Veja Invocando guix gc.

--cores=n
-c n

Usa n núcleos de CPU para compilar cada derivação; 0 significa todos disponíveis.

O valor padrão é 0, mas pode ser substituído pelos clientes, como a opção --cores de guix build (veja Invocando guix build).

O efeito é definir a variável de ambiente NIX_BUILD_CORES no processo de compilação, que pode então usá-la para explorar o paralelismo interno — por exemplo, executando make -j$NIX_BUILD_CORES.

--max-jobs=n
-M n

Permite no máximo n tarefas de compilação em paralelo. O valor padrão é 1. Definir como 0 significa que nenhuma compilação será executada localmente; em vez disso, o daemon descarregará as compilações (veja Usando o recurso de descarregamento) ou simplesmente falhará.

--max-silent-time=segundos

Quando o processo de compilação ou substituição permanecer em silêncio por mais de segundos, encerra-o e relata uma falha de compilação.

The default value is 3600 (one hour).

O valor especificado aqui pode ser substituído pelos clientes (veja --max-silent-time).

--timeout=segundos

Da mesma forma, quando o processo de compilação ou substituição durar mais que segundos, encerra-o e relata uma falha de compilação.

O valor padrão é 24 horas.

O valor especificado aqui pode ser substituído pelos clientes (veja --timeout).

--rounds=N

Compila cada derivação n vezes seguidas e gera um erro se os resultados consecutivos da compilação não forem idênticos bit a bit. Observe que essa configuração pode ser substituída por clientes como guix build (veja Invocando guix build).

Quando usado em conjunto com --keep-failed, uma saída de comparação é mantida no armazém, sob /gnu/store/…-check. Isso facilita procurar por diferenças entre os dois resultados.

--debug

Produz uma saída de depuração.

Isso é útil para depurar problemas de inicialização do daemon, mas pode ser substituído pelos clientes, por exemplo, a opção --verbosity de guix build (veja Invocando guix build).

--chroot-directory=dir

adiciona dir ao chroot de compilação.

Isso pode alterar o resultado dos processos de compilação – por exemplo, se eles usam dependências opcionais encontradas em dir quando estão disponíveis, e não o contrário. Por esse motivo, não é recomendável fazê-lo. Em vez disso, verifique se cada derivação declara todas as entradas necessárias.

--disable-chroot

Desabilita compilações em chroot.

O uso dessa opção não é recomendado, pois, novamente, isso permitiria que os processos de compilação obtivessem acesso a dependências não declaradas. Porém, é necessário quando o guix-daemon está sendo executado em uma conta de usuário sem privilégios.

--log-compression=tipo

Compacta logs de compilação de aconrdo com tipo, que pode ser um entre gzip, bzip2 e none.

A menos que --lose-logs seja usado, todos os logs de build são mantidos em localstatedir. Para economizar espaço, o daemon os compacta automaticamente com gzip por padrão.

--discover[=yes|no]

Se deve descobrir servidores substitutos na rede local usando mDNS e DNS-SD.

Este recurso ainda é experimental. No entanto, aqui estão algumas considerações.

  1. Pode ser mais rápido/menos caro do que buscar em servidores remotos;
  2. Não há riscos de segurança, apenas substitutos genuínos serão usados (veja Autenticação de substituto);
  3. Um invasor anunciando guix publish na sua LAN não pode fornecer binários maliciosos, mas pode descobrir qual software você está instalando;
  4. Os servidores podem servir substitutos via HTTP, sem criptografia, para que qualquer pessoa na LAN possa ver qual software você está instalando.

Também é possível habilitar ou desabilitar a descoberta de servidor substituto em tempo de execução executando:

herd discover guix-daemon on
herd discover guix-daemon off
--disable-deduplication

Desabilita “deduplicação” automática de arquivos no armazém.

Por padrão, os arquivos adicionados ao armazém são automaticamente “deduplicados”: se um arquivo recém-adicionado for idêntico a outro encontrado no armazém, o daemon tornará o novo arquivo um link físico para o outro arquivo. Isso pode reduzir notavelmente o uso do disco, às custas de um leve aumento na carga de entrada/saída no final de um processo de criação. Esta opção desativa essa otimização.

--gc-keep-outputs[=yes|no]

Diz se o coletor de lixo (GC) deve manter as saídas de derivações vivas.

Quando definido como yes, o GC manterá as saídas de qualquer derivação ativa disponível no armazém—os arquivos .drv. O padrão é no, o que significa que as saídas de derivação são mantidas somente se forem acessíveis a partir de uma raiz do GC. Veja Invocando guix gc, para mais informações sobre raízes do GC.

--gc-keep-derivations[=yes|no]

Diz se o coletor de lixo (GC) deve manter as derivações correspondentes às saídas vivas.

Quando definido como yes, como é o caso por padrão, o GC mantém derivações—ou seja, arquivos .drv—desde que pelo menos uma de suas saídas esteja ativa. Isso permite que os usuários acompanhem as origens dos itens em seu armazém. Defini-lo como no economiza um pouco de espaço em disco.

Dessa forma, definir --gc-keep-derivations como yes faz com que a vivacidade flua das saídas para as derivações, e definir --gc-keep-outputs como yes faz com que a vivacidade flua das derivações para as saídas. Quando ambos são definidos como yes, o efeito é manter todos os pré-requisitos de compilação (as fontes, o compilador, as bibliotecas e outras ferramentas de tempo de compilação) de objetos ativos no armazém, independentemente de esses pré-requisitos serem acessíveis a partir de uma raiz GC. Isso é conveniente para desenvolvedores, pois economiza reconstruções ou downloads.

--impersonate-linux-2.6

Em sistemas baseados em Linux, personifique o Linux 2.6. Isso significa que a chamada de sistema uname do kernel relatará 2.6 como o número da versão.

Isso pode ser útil para criar programas que (geralmente de forma errada) dependem do número da versão do kernel.

--lose-logs

Não mantenha logs de build. Por padrão, eles são mantidos em localstatedir/guix/log.

--system=system

Assuma system como o tipo de sistema atual. Por padrão, é o par arquitetura/kernel encontrado no momento da configuração, como x86_64-linux.

--listen=endpoint

Ouça conexões em endpoint. endpoint é interpretado como o nome do arquivo de um soquete de domínio Unix se ele começar com / (sinal de barra). Caso contrário, endpoint é interpretado como um nome de host ou nome de host e porta para ouvir. Aqui estão alguns exemplos:

--listen=/gnu/var/daemon

Ouça conexões no soquete de domínio Unix /gnu/var/daemon, criando-o se necessário.

--listen=localhost

Ouça as conexões TCP na interface de rede correspondente a localhost, na porta 44146.

--listen=128.0.0.42:1234

Ouça as conexões TCP na interface de rede correspondente ao 128.0.0.42, na porta 1234.

Esta opção pode ser repetida várias vezes, nesse caso guix-daemon aceita conexões em todos os endpoints especificados. Os usuários podem informar aos comandos do cliente a qual endpoint se conectar definindo a variável de ambiente GUIX_DAEMON_SOCKET (veja GUIX_DAEMON_SOCKET).

Nota: O protocolo daemon é unauthenticated and unencrypted. Usar --listen=host é adequado em redes locais, como clusters, onde apenas nós confiáveis podem se conectar ao daemon de compilação. Em outros casos em que o acesso remoto ao daemon é necessário, recomendamos usar soquetes de domínio Unix junto com SSH.

Quando --listen é omitido, guix-daemon escuta conexões no soquete de domínio Unix localizado em localstatedir/guix/daemon-socket/socket.


Próximo: Configuração de aplicativo, Anterior: Configurando o daemon, Acima: Instalação   [Conteúdo][Índice]