Próximo: , Anterior: , Acima: Gerenciamento de pacote   [Conteúdo][Índice]


5.9 Inferiores

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:

Procedimento: inferior-for-channels canais [#:cache-directory] [#:ttl]

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.

Procedimento: open-inferior diretório [#:command "bin/guix"]

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.

Procedimento: inferior-packages inferior

Retorna a lista de pacotes conhecidos por inferior.

Procedimento: lookup-inferior-packages inferior nome [versão]

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.

Procedimento: inferior-package? obj

Retorna verdadeiro se obj for um pacote inferior.

Procedimento: inferior-package-name pacote
Procedimento: inferior-package-version pacote
Procedimento: inferior-package-synopsis pacote
Procedimento: inferior-package-description pacote
Procedimento: inferior-package-home-page pacote
Procedimento: inferior-package-location pacote
Procedimento: inferior-package-inputs pacote
Procedimento: inferior-package-native-inputs pacote
Procedimento: inferior-package-propagated-inputs pacote
Procedimento: inferior-package-transitive-propagated-inputs pacote
Procedimento: inferior-package-native-search-paths pacote
Procedimento: inferior-package-transitive-native-search-paths pacote
Procedimento: inferior-package-search-paths pacote

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]