Empfohlene und alternative Abhängigkeiten in FreeBSD .pkg

Empfohlene und alternative Abhängigkeiten in FreeBSD .pkg

Ein FreeBSD-Paket gibt Abhängigkeiten in seinem Manifest normalerweise wie folgt an:

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

Dadurch prüft der Paketmanager, ob beide Abhängigkeiten in der gewünschten Version vorhanden sind und fügt sie bei Fehlen hinzu oder bricht mit einem Fehler ab, sofern ihm nicht mitgeteilt wird, dass die Abhängigkeiten ignoriert werden sollen.

Pakete im Debian-Stil (.deb) unter Linux bieten dagegen Funktionen wie:

  • Empfehlungen: Diese zeigen dem Paketmanager an, dass nur bestimmte Funktionen der Software von den als empfohlen aufgeführten Paketen abhängen (während das Paket meist nutzlos ist, wenn eine Abhängigkeit fehlt). Je nachdem, wie der Paketmanager konfiguriert ist, können Empfehlungen als Abhängigkeiten behandelt werden oder das Paket kann ohne sie installiert werden.
  • Alternativen: Ein Paket kann beispielsweise von abhängen curl | wget. In diesem Fall genügt bereits das Vorhandensein eines der beiden Pakete dieser bestimmten Abhängigkeit, da die Software zur Laufzeit herausfindet, welches der beiden installiert ist, und mit dem arbeitet, was verfügbar ist.

Bietet .pkg diese Funktionen auch? Wie würden diese im Manifest angegeben?

Antwort1

FreeBSD-Pakete sind Binärpakete (siehePaket(7)). Obwohl Sie theoretisch ein Bottom-Up-Binärpaket erstellen können, wäre dies sehr ungewöhnlich. Sie würden lieber mit einemHäfen(7)Quellbasierter „Port“ und verwenden Sie diesen als Ursprung Ihres Pakets. Auch wenn Sie nur eine binäre Quelle haben.

Dies ist dann sehr gut dokumentiert in derFreeBSD Porter's Handbook.

Sie können Ihre eigenen lokalen Pakete erstellen, wenn Sie möchten. Wenn Sie ein Vanilla-FreeBSD-System haben, werden die Binärpakete aus den Standard-FreeBSD-Repositorys installiert. Diese Pakete werden alle aus dem Ports-Baum mit demStandardKonfigurationsoptionen.

Sie können die Befehlszeilentools verwenden, aber eine einfache Abkürzung wäre, zu browsenFreshportsWenn wir uns ansehenBindewerkzeugeWir sehen die folgenden Standardeinstellungen:

===> 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

Wenn Sie Ihren Port also lokal erstellen, können Sie diese Einstellungen mit ändern make config. Wenn Sie ihn nur lokal verwenden möchten, können Sie ein ausführen make install. Wenn Sie jedoch ein Binärpaket dieser Variante haben möchten, führen Sie einfach ein aus make package.

Wenn Sie einen Port/ein Paket von Grund auf neu erstellen, können Sie sehen, wie Sie das einrichtenMakefile-OptionenBeachten Sie, dass sie auch als Radiooptionen gruppiert werden können (wie oben bei GSSAPI).

Gemeinsame Abhängigkeiten werden üblicherweise behandelt mitVERWENDET Makroswie zum BeispielPython.

Historisch gesehen haben SieSlave-Portsmit Invarianten umzugehen. Aber der modernere Ansatz besteht darin,AromenDies ist besonders häufig der Fall beiPythonaber bitte denken Sie daran, so liberal wie möglich zu sein in derVersionsauswahlwie möglich.

Die Architektur unterscheidet sich dann von Debian. Es gibt keine „Empfehlungen“ als solche. Sie würden lieber das minimal funktionsfähige Paket erstellen und dann die optionalen Abhängigkeiten im Port mithilfe von Optionen auswählbar machen. Die „Alternativen“ werden im Port wieder mithilfe von Optionen behandelt. Ihr Beispiel wäre dann eine Radiogruppe, die entweder curloder zulässt wget. Um dies in Ihren Binärpaketen widerzuspiegeln, würden Sie dann Varianten erstellen.

Wenn Sie Ihr eigenes Repository erstellen möchten oder dies als Teil einer CI-Pipeline tun, sollten Sie einen Blick darauf werfenPuderzuckerDabei handelt es sich um dasselbe Erstellungstool, das für die offiziellen Repositories verwendet wird.

verwandte Informationen