Próximo: Invocando guix describe
, Anterior: Invocando guix time-machine
, Acima: Gerenciamento de pacote [Conteúdo][Índice]
Nota: A funcionalidade descrita aqui é uma “prévia de tecnologia” da versão 8c1348e. Como tal, a interface está sujeita a alterações.
Às vezes, você pode precisar misturar pacotes da revisão do Guix que você está executando atualmente com pacotes disponíveis em uma revisão diferente do Guix. Os inferiores do Guix permite que você consiga isso compondo diferentes revisões do Guix de maneiras arbitrárias.
Tecnicamente, um “inferior” é essencialmente um processo Guix separado
conectado ao seu processo Guix principal por meio de um REPL
(veja Invocando guix repl
). O módulo (guix inferior)
permite que
você crie inferiores e se comunique com eles. Ele também fornece uma
interface de alto nível para navegar e manipular os pacotes que um inferior
fornece—pacotes inferiores.
Quando combinados com canais (veja Canais), os inferiores fornecem uma
maneira simples de interagir com uma revisão separada do Guix. Por exemplo,
vamos supor que você queira instalar em seu perfil o pacote guile
atual, junto com o guile-json
como ele existia em uma revisão mais
antiga do Guix—talvez porque o mais novo guile-json
tenha uma API
incompatível e você queira executar seu código contra a API antiga. Para
fazer isso, você pode escrever um manifesto para uso por guix package
--manifest
(veja Escrevendo manifestos); nesse manifesto, você criaria um
inferior para aquela revisão antiga do Guix que você se importa, e você
procuraria o pacote guile-json
no inferior:
(use-modules (guix inferior) (guix channels) (srfi srfi-1)) ;para 'first' (define canais ;; Esta é a revisão antiga da qual queremos ;; extrair guile-json. (list (channel (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit "65956ad3526ba09e1f7a40722c96c6ef7c0936fe")))) (define inferior ;; Um inferior representando a revisão acima. (inferior-for-channels canais)) ;; Agora crie um manifesto com o pacote "guile" atual ;; e o antigo pacote "guile-json". (packages->manifest (list (first (lookup-inferior-packages inferior "guile-json")) (specification->package "guile")))
Na primeira execução, guix package --manifest
pode ter que
construir o canal que você especificou antes de poder criar o inferior;
execuções subsequentes serão muito mais rápidas porque a revisão do Guix
será armazenada em cache.
O módulo (guix inferior)
fornece os seguintes procedimentos para
abrir um inferior:
Retorna um inferior para canais, uma lista de canais. Use o cache em cache-directory, onde as entradas podem ser recuperadas após ttl segundos. Este procedimento abre uma nova conexão com o daemon de construção.
Como efeito colateral, esse procedimento pode criar ou substituir binários para canais, o que pode levar tempo.
Abra o Guix inferior em diretório, executando o comando
diretório/command repl
ou equivalente. Retorne #f
se o inferior não puder ser iniciado.
Os procedimentos listados abaixo permitem que você obtenha e manipule pacotes inferiores.
Retorna a lista de pacotes conhecidos por inferior.
Retorna a lista ordenada de pacotes inferiores que correspondem a nome em inferior, com os números de versão mais altos primeiro. Se versão for true, retorna apenas pacotes com um número de versão prefixado por versão.
Retorna verdadeiro se obj for um pacote inferior.
Esses procedimentos são a contrapartida dos acessadores de registro de
pacote (veja Referência do package
). A maioria deles funciona consultando o
inferior de onde pacote vem, então o inferior ainda deve estar ativo
quando você chamar esses procedimentos.
Pacotes inferiores podem ser usados transparentemente como qualquer outro
pacote ou objeto tipo arquivo em expressões-G (veja Expressões-G). Eles
também são manipulados transparentemente pelo procedimento
packages->manifest
, que é comumente usado em manifestos
(veja a opção --manifest de guix
package
). Assim, você pode inserir um pacote inferior praticamente em
qualquer lugar em que inseriria um pacote regular: em manifestos, no campo
packages
da sua declaração operating-system
e assim por
diante.
Próximo: Invocando guix describe
, Anterior: Invocando guix time-machine
, Acima: Gerenciamento de pacote [Conteúdo][Índice]