Dependências recomendadas e alternativas no FreeBSD .pkg

Dependências recomendadas e alternativas no FreeBSD .pkg

Um pacote FreeBSD normalmente especifica dependências em seu manifesto da seguinte forma:

deps:
  # python39, version 3.9 or higher
  python39: {origin: lang/python39, version: 3.9}
  # bind-tools, any version
  bind-tools: {origin: dns/bind-tools}

Isso fará com que o gerenciador de pacotes verifique se ambas as dependências na versão desejada estão presentes e, se estiverem faltando, adicione-as ou aborte com um erro, a menos que seja instruído a ignorar as dependências.

Os pacotes estilo Debian (.deb) no Linux, por outro lado, oferecem recursos como:

  • Recomendações: indicam ao gerenciador de pacotes que apenas alguns recursos do software dependem dos pacotes listados como recomendados (enquanto o pacote é praticamente inútil se uma dependência estiver faltando). Dependendo de como o gerenciador de pacotes está configurado, as recomendações podem ser tratadas como dependências ou o pacote pode ser instalado sem elas.
  • Alternativas: por exemplo, um pacote pode depender de curl | wget, caso em que a presença de qualquer um dos pacotes por si só satisfará essa dependência específica, pois o software descobre em tempo de execução qual dos dois está instalado e funciona com o que estiver disponível.

O .pkg também oferece esses recursos? Como isso seria especificado no manifesto?

Responder1

Pacotes do FreeBSD são pacotes binários (vejapacote(7)). Embora teoricamente você possa criar um pacote binário ascendente, isso seria muito incomum. Você prefere começar com umportas(7)"porta" baseada em fonte e use-a como a origem do seu pacote. Mesmo se você tiver apenas uma fonte binária.

Isto está muito bem documentado noManual do FreeBSD Porter.

Você pode criar seus próprios pacotes locais, se desejar. Se você tiver um sistema FreeBSD vanilla, os pacotes binários serão instalados a partir dos repositórios padrão do FreeBSD. Esses pacotes são todos feitos a partir da árvore de ports com opadrãoopções de configuração.

Você pode usar as ferramentas de linha de comando, mas um atalho fácil seria navegarFreshports. Se olharmosferramentas de ligaçãovemos os seguintes padrões:

===> The following configuration options are available for bind-tools-9.18.24:
     FIXED_RRSET=off: Enable fixed rrset ordering
     IDN=on: International Domain Names support
     JSON=on: JSON file/format/parser support
     LARGE_FILE=off: 64-bit file support
====> GSSAPI Security API support: you have to select exactly one of them
     GSSAPI_BASE=off: Using Heimdal in base (nsupdate is broken)
     GSSAPI_HEIMDAL=off: Using security/heimdal (nsupdate is broken)
     GSSAPI_MIT=off: Using security/krb5
     GSSAPI_NONE=on: Disable
===> Use 'make config' to modify these settings

Portanto, se você construir seu port localmente, poderá alterar essas configurações usando make config. Se você quiser apenas usá-lo localmente, você pode fazer um arquivo make install. Mas se você quiser ter um pacote binário desta variante, basta fazer um arquivo make package.

Se você estiver fazendo um port/pacote do zero, você pode ver como configurar oopções de makefile. Observe que eles também podem ser agrupados como opções de rádio (como no GSSAPI acima).

Dependências compartilhadas comuns geralmente são tratadas comUSA MacroscomoPitão.

Historicamente você fezportos escravospara lidar com invariantes. Mas quanto mais moderno parece tersabores. Isto é especialmente comum comPitãomas lembre-se de ser tão liberal noseleção de versãoque possível.

A arquitetura é então diferente do Debian. Não existem "recomendações" como tais. Você prefere criar o pacote mínimo viável e depois tornar as dependências opcionais selecionáveis ​​na porta usando opções. As “alternativas” serão tratadas novamente no porto com opções. Seu exemplo seria então com um grupo de rádio para permitir curlou wget. Para que isso seja refletido em seus pacotes binários, você criaria variações.

Se você deseja criar seu próprio repositório ou está fazendo isso como parte de um pipeline de CI, você deve dar uma olhada emPoudièreque é a mesma ferramenta de construção usada para os repositórios oficiais.

informação relacionada