Wie verwendet man die Ports Collection auf FreeBSD?
FreeBSD ist eine prominente Serverplattform und ein freies, quelloffenes Unix-ähnliches Betriebssystem. FreeBSD ist ein Betriebssystem, das für den Betrieb auf modernen Servern, Personal Computern und eingebetteten Geräten entwickelt wurde. Die FreeBSD Ports and Packages Collection bietet Benutzern und Administratoren eine einfache Methode zur Installation von Programmen.
Die Ports Collection ist mit den neuesten FreeBSD-CURRENT- und FreeBSD-STABLE-Versionen kompatibel. Ältere Versionen werden nicht unterstützt und funktionieren möglicherweise nicht erfolgreich mit einem aktuellen Satz von Ports. Letztendlich könnten Änderungen an der Ports-Sammlung von der Funktionalität abhängen, die in früheren Ausgaben fehlte. Bitte geben Sie den zu übersetzenden Text ein.
In diesem Artikel werden wir die folgenden Themen behandeln:
- Was ist die Ports Collection?
- Wie installiert man die Ports Collection?
- Wie installiert man die Ports Collection mit der Git-Methode?
- Wie installiert man die Ports Collection mit der Portsnap-Methode?
- Wie installiert man Ports?
- Wie man die Ports-Installation anpasst?
- Wie entfernt man installierte Ports?
- Wie man installierte Ports anzeigt?
- Wie aktualisiert man Ports?
- Wie man Ports mit Portmaster aktualisiert?
- Wie man Ports mit portupgrade aktualisiert?
- Wie verwaltet man die Festplattengröße mit Ports?
- Wie baut man Pakete mit Poudriere?
- Wie initialisiert man Jails und Port Trees?
- Wie konfiguriert man pkg-Clients, um sich mit einem Poudriere-Repository zu integrieren?
- Was sind die Überlegungen nach der Installation?
Was ist Ports Collection?
Makefiles, Patches und Beschreibungsdateien bilden die Ports Collection. Jede Sammlung dieser Dateien, die benötigt wird, um eine einzigartige Anwendung unter FreeBSD zu erstellen und zu installieren, wird als Port bezeichnet. Bitte geben Sie den zu übersetzenden Text ein.
Die Ports Collection wird standardmäßig in einem Unterordner von /usr/ports
aufbewahrt.
Die Ports Collection umfasst Verzeichnisse für Softwarekategorien. Innerhalb jeder Kategorie befinden sich verschiedene Anwendungsunterverzeichnisse. Jedes Anwendungsunterverzeichnis enthält eine Sammlung von Dateien, die als Ports-Skelett bezeichnet werden und FreeBSD anweisen, wie das Programm entwickelt und installiert wird. Jede Port-Vorlage hat die folgenden Dateien und Verzeichnisse:
-
Makefile: gibt an, wie ein Programm gebaut werden soll und wo seine Komponenten installiert werden sollen.
-
distinfo: enthält die Namen und Prüfziffern der Dateien, die zum Erstellen des Ports erforderlich sind.
-
pkg-plist: Eine Liste aller Dateien, die vom Port installiert werden. Zusätzlich weist es das Ports-System an, welche Dateien bei der Deinstallation gelöscht werden sollen.
-
pkg-descr: bietet eine umfassendere Beschreibung des Pakets.
-
files/: Dieses Verzeichnis enthält alle erforderlichen Korrekturen, um die Software auf FreeBSD zu bauen und zu installieren. Dieses Verzeichnis kann andere Dateien zum Erstellen von Ports enthalten.
Einige Ports enthalten pkg-message und/oder andere Dateien, um ungewöhnliche Umstände zu bewältigen.
Der Port enthält nicht den Quellcode selbst, oft als distfile
bekannt. Das Verzeichnis /usr/ports/distfiles
wird während der Entpackungsphase der Port-Entwicklung automatisch mit dem heruntergeladenen Quellcode gefüllt.
Bevor Sie die Ports Collection installieren und verwenden, beachten Sie bitte, dass es normalerweise nicht empfohlen wird, Anwendungen mit der Ports Collection in Kombination mit von pkg
angebotenen Binärpaketen zu installieren. pkg
folgt standardmäßig den vierteljährlichen Branch-Releases des Ports-Baums und nicht HEAD. Es kann zu Konflikten zwischen Abhängigkeiten, die von pkg
installiert wurden, und denen aus der Ports Collection kommen, kommen, wenn die Abhängigkeiten für einen Port in HEAD von denen in einer vierteljährlichen Branch-Version abweichen. Stellen Sie sicher, dass die Ports Collection und pkg
sich auf demselben Branch-Release des Ports-Baums befinden, wenn sie zusammen verwendet werden müssen.
Wie installiert man die Ports Collection?
Bevor Sie eine Anwendung kompilieren, die einen Port benötigt, muss die Ports Collection installiert sein. Wenn es während des FreeBSD-Installationsprozesses nicht installiert wurde, können Sie die Ports Collection mit einer der folgenden Methoden installieren:
-
Git
-
Portsnap
Wie installiert man die Ports Collection mit der Git-Methode?
Git kann verwendet werden, um die Ports Collection abzurufen, wenn zusätzliche Kontrolle über den Ports-Baum erforderlich ist, wenn lokale Änderungen beibehalten werden müssen oder wenn Sie FreeBSD-CURRENT verwenden. Sie können die folgenden Schritte befolgen, um die Ports Collection mit Git zu installieren: Bitte geben Sie den zu übersetzenden Text ein.
-
Git muss installiert werden, indem die folgenden Befehle ausgeführt werden, bevor der Ports-Baum ausgecheckt werden kann. Wenn eine vorhandene Kopie des Ports-Baums verfügbar ist, installieren Sie Git wie folgt:
cd /usr/ports/devel/git
make clean installGit kann als Paket installiert werden, indem der nächste Befehl ausgeführt wird, wenn der Ports-Baum nicht verfügbar ist oder wenn pkg zur Verwaltung von Paketen verwendet wird.
pkg install git
Sie sollten die Ausgabe ähnlich wie unten angegeben sehen:
Updating FreeBSD repository catalogue...
Fetching packagesite.pkg: 100% 6 MiB 2.3MB/s 00:03
Processing entries: 100%
FreeBSD repository update completed. 32622 packages processed.
All repositories are up to date.
The following 28 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
ca_root_nss: 3.85 [FreeBSD]
curl: 7.85.0 [FreeBSD]
git: 2.38.1_4 [FreeBSD]
libidn2: 2.3.3_1 [FreeBSD]
libnghttp2: 1.48.0 [FreeBSD]
........................
p5-HTTP-Message: 6.39 [FreeBSD]
p5-IO-HTML: 1.004 [FreeBSD]
p5-IO-Socket-INET6: 2.72_1 [FreeBSD]
p5-IO-Socket-SSL: 2.077 [FreeBSD]
p5-LWP-MediaTypes: 6.04 [FreeBSD]
p5-Mozilla-CA: 20221114 [FreeBSD]
p5-Net-SSLeay: 1.92 [FreeBSD]
p5-Socket6: 0.29 [FreeBSD]
p5-TimeDate: 2.33,1 [FreeBSD]
p5-URI: 5.15 [FreeBSD]
Number of packages to be installed: 28
The process will require 47 MiB more space.
6 MiB to be downloaded.
Proceed with this action? [y/N]: y
[1/15] Fetching p5-CGI-4.54.pkg: 100% 155 KiB 158.6kB/s 00:01
[2/15] Fetching p5-TimeDate-2.33,1.pkg: 100% 33 KiB 33.5kB/s 00:01
[3/15] Fetching p5-Clone-0.45.pkg: 100% 10 KiB 10.5kB/s 00:01
[4/15] Fetching p5-Error-0.17029.pkg: 100% 27 KiB 27.3kB/s 00:01
[5/15] Fetching p5-HTML-Tagset-3.20_1.pkg: 100% 12 KiB 12.0kB/s 00:01
[6/15] Fetching git-2.38.1_4.pkg: 100% 6 MiB 2.0MB/s 00:03
[7/15] Fetching p5-Authen-SASL-2.16_1.pkg: 100% 40 KiB 41.5kB/s 00:01
[8/15] Fetching p5-Socket6-0.29.pkg: 100% 17 KiB 17.4kB/s 00:01
[9/15] Fetching p5-HTTP-Date-6.05.pkg: 100% 10 KiB 10.6kB/s 00:01
[10/15] Fetching p5-GSSAPI-0.28_2.pkg: 100% 39 KiB 40.4kB/s 00:01
[11/15] Fetching p5-IO-Socket-INET6-2.72_1.pkg: 100% 13 KiB 13.1kB/s 00:01
[12/15] Fetching p5-Encode-Locale-1.05.pkg: 100% 12 KiB 11.9kB/s 00:01
[13/15] Fetching p5-LWP-MediaTypes-6.04.pkg: 100% 20 KiB 20.1kB/s 00:01
[14/15] Fetching p5-IO-HTML-1.004.pkg: 100% 15 KiB 15.4kB/s 00:01
[15/15] Fetching p5-Digest-HMAC-1.04.pkg: 100% 14 KiB 14.1kB/s 00:01
Checking integrity... done (0 conflicting)
[1/28] Installing p5-TimeDate-2.33,1...
[1/28] Extracting p5-TimeDate-2.33,1: 100%
[2/28] Installing p5-URI-5.15...
[2/28] Extracting p5-URI-5.15: 100%
[3/28] Installing libunistring-1.1...
[3/28] Extracting libunistring-1.1: 100%
...........
All you have to do to make gitweb work is:
1) Please be sure you're able to execute CGI scripts in
/usr/local/share/examples/git/gitweb.
2) Set the GITWEB_CONFIG variable in your webserver's config to
/usr/local/etc/git/gitweb.conf. This variable is passed to gitweb.cgi.
3) Restart server.
If you installed the CONTRIB option please note that the scripts are installed in /usr/local/share/git-core/contrib. Some of them require other ports to be installed (perl, python, etc), which you may need to install manually.
pkg install git 6.25s user 1.53s system 18% cpu 42.495 total -
Sie können den nächsten Befehl ausführen, um eine Kopie des HEAD-Zweigs des Ports-Baums auszuchecken:
git clone https://git.FreeBSD.org/ports.git /usr/ports
Cloning into '/usr/ports'...
remote: Enumerating objects: 5663197, done.
remote: Counting objects: 100% (973/973), done.
remote: Compressing objects: 100% (157/157), done.
remote: Total 5663197 (delta 931), reused 816 (delta 816), pack-reused 5662224
Receiving objects: 100% (5663197/5663197), 1.01 GiB | 2.88 MiB/s, done.
Resolving deltas: 100% (3416262/3416262), done.
Updating files: 100% (150570/150570), done.
git clone https://git.FreeBSD.org/ports.git /usr/ports 539.81s user 124.34s system 97% cpu 11:24.47 totalOder, um eine Kopie eines vierteljährlichen Branches auszuleihen, führen Sie den folgenden Befehl aus:
git clone https://git.FreeBSD.org/ports.git /usr/ports -b 2022Q4
Sie sollten die Ausgabe ähnlich wie unten angegeben sehen:
Cloning into '/usr/ports'...
remote: Enumerating objects: 5663197, done.
remote: Counting objects: 100% (936/936), done.
remote: Compressing objects: 100% (120/120), done.
remote: Total 5663197 (delta 923), reused 816 (delta 816), pack-reused 5662261
Receiving objects: 100% (5663197/5663197), 1.01 GiB | 2.88 MiB/s, done.
Resolving deltas: 100% (3416275/3416275), done.
Updating files: 100% (147690/147690), done.
git clone https://git.FreeBSD.org/ports.git /usr/ports -b 2022Q4 527.47s user 125.50s system 96% cpu 11:15.12 total -
Aktualisieren Sie
/usr/ports
nach dem ersten Git-Checkout nach Bedarf, indem Sie den folgenden Befehl ausführen:git -C /usr/ports pull
-
Sie können
/usr/ports
auf einen anderen vierteljährlichen Branch ändern, falls erforderlich, indem Sie die folgenden Befehle ausführen:git -C switch /usr/ports 2022Q4
Wie installiert man die Ports Collection mit der Portsnap-Methode?
Das Basissystem von FreeBSD enthält Portsnap. Dies ist die bevorzugte Methode, um die Ports Collection zu erhalten, da sie schnell und unkompliziert ist. Dieses Tool stellt eine Verbindung zu einem FreeBSD-Server her, validiert den sicheren Schlüssel und lädt eine frische Kopie der Ports Collection herunter. Die Integrität aller heruntergeladenen Dateien wird mit dem Schlüssel überprüft. Sie können die folgenden Schritte befolgen, um die Ports Collection mit portsnap zu installieren:
-
Um einen komprimierten Snapshot der Ports Collection nach
/var/db/portsnap
herunterzuladen, verwenden Sie den folgenden Befehl:portsnap fetch
Sie sollten die Ausgabe ähnlich wie unten angegeben sehen:
Looking up portsnap.FreeBSD.org mirrors... 5 mirrors found.
Fetching public key from dualstack.aws.portsnap.freebsd.org... done.
Fetching snapshot tag from dualstack.aws.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Tue Dec 13 03:30:41 +03 2022:
fd565c769b680049c9f46cc0011374fba928fe5e253925 98 MB 2927 kBps 34s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from dualstack.aws.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Tue Dec 13 03:30:41 +03 2022 to Tue Dec 13 11:30:16 +03 2022.
Fetching 5 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 31 patches.
(31/31) 100.00% done.
done.
Applying patches...
done.
Fetching 0 new ports or files... done.
portsnap fetch 60.09s user 68.66s system 90% cpu 2:22.56 total -
Durch Ausführen des nächsten Befehls extrahieren Sie den Snapshot in
/usr/ports
, wenn Sie Portsnap zum ersten Mal ausführen.portsnap extract
-
Nachdem die erste Verwendung von Portsnap wie oben beschrieben durchgeführt wurde, kann
/usr/ports
nach Bedarf geändert werden, indem der folgende Befehl ausgeführt wird:portsnap fetch
portsnap updateDie Extraktions- oder Aktualisierungsoperation kann gleichzeitig unter Verwendung von Fetch wie folgt ausgeführt werden:
portsnap fetch update
Wie installiert man Ports?
Dieser Abschnitt gibt grundlegende Methoden zum Installieren oder Entfernen von Anwendungen mit der Ports Collection.
Bevor Sie einen Port erstellen, stellen Sie sicher, dass die Ports Collection aktualisiert wurde, indem Sie portsnap update
ausführen. Da die Installation von Drittanbieter-Software Sicherheitsanfälligkeiten verursachen kann, wird empfohlen, http://vuxml.freebsd.org/
auf bekannte Sicherheitsprobleme im Zusammenhang mit dem Port zu überprüfen, bevor Sie Drittanbieter-Software installieren. Alternativ können Sie vor der Installation eines neuen Ports pkg audit -F
ausführen. Während der täglichen Sicherheitsüberprüfung des Systems kann dieser Befehl so eingestellt werden, dass er automatisch eine Sicherheitsüberprüfung durchführt und die Schwachstellendatenbank aktualisiert.
Die Ports Collection benötigt eine aktive Internetverbindung, um zu funktionieren. Zusätzlich ist Superuser-Berechtigung erforderlich.
Um den Port zu erstellen und zu installieren, gehen Sie in das Installationsverzeichnis und führen Sie den Befehl make install an der Eingabeaufforderung aus. Zum Beispiel, um die Software nano
zu installieren, führen Sie die folgenden Befehle aus.
cd /usr/ports/editors/nano
make install
Sie sollten die Ausgabe ähnlich wie unten angegeben sehen:
........
installing ru.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/ru/LC_MESSAGES/nano.mo
installing sk.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/sk/LC_MESSAGES/nano.mo
installing sl.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/sl/LC_MESSAGES/nano.mo
installing sq.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/sq/LC_MESSAGES/nano.mo
installing sr.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/sr/LC_MESSAGES/nano.mo
installing sv.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/sv/LC_MESSAGES/nano.mo
installing tr.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/tr/LC_MESSAGES/nano.mo
installing uk.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/uk/LC_MESSAGES/nano.mo
installing vi.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/vi/LC_MESSAGES/nano.mo
installing zh_CN.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/zh_CN/LC_MESSAGES/nano.mo
installing zh_TW.gmo as /usr/ports/editors/nano/work/stage/usr/local/share/locale/zh_TW/LC_MESSAGES/nano.mo
if test "nano" = "gettext-tools"; then /bin/mkdir -p /usr/ports/editors/nano/work/stage/usr/local/share/gettext/po; for file in Makefile.in.in remove-potcdate.sin quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot Makevars.template; do install -m 0644 ./$file /usr/ports/editors/nano/work/stage/usr/local/share/gettext/po/$file; done; for file in Makevars; do rm -f /usr/ports/editors/nano/work/stage/usr/local/share/gettext/po/$file; done; else : ; fi
Making install in src
/bin/mkdir -p '/usr/ports/editors/nano/work/stage/usr/local/bin'
install -s -m 555 nano '/usr/ports/editors/nano/work/stage/usr/local/bin'
/usr/bin/make install-exec-hook
cd /usr/ports/editors/nano/work/stage/usr/local/bin && rm -f rnano && ln -s nano rnano
Making install in syntax
/bin/mkdir -p '/usr/ports/editors/nano/work/stage/usr/local/share/nano'
/bin/mkdir -p '/usr/ports/editors/nano/work/stage/usr/local/share/nano/extra'
install -m 0644 extra/ada.nanorc extra/fortran.nanorc extra/haskell.nanorc extra/povray.nanorc extra/spec.nanorc '/usr/ports/editors/nano/work/stage/usr/local/share/nano/extra'
/bin/mkdir -p '/usr/ports/editors/nano/work/stage/usr/local/share/nano'
install -m 0644 asm.nanorc autoconf.nanorc awk.nanorc changelog.nanorc cmake.nanorc c.nanorc css.nanorc default.nanorc elisp.nanorc email.nanorc go.nanorc groff.nanorc guile.nanorc html.nanorc java.nanorc javascript.nanorc json.nanorc lua.nanorc makefile.nanorc man.nanorc markdown.nanorc nanohelp.nanorc nanorc.nanorc nftables.nanorc objc.nanorc ocaml.nanorc patch.nanorc perl.nanorc php.nanorc po.nanorc python.nanorc ruby.nanorc rust.nanorc sh.nanorc sql.nanorc tcl.nanorc tex.nanorc texinfo.nanorc xml.nanorc yaml.nanorc '/usr/ports/editors/nano/work/stage/usr/local/share/nano'
install -m 0644 /usr/ports/editors/nano/work/nano-7.0/doc/nano.1.html /usr/ports/editors/nano/work/stage/usr/local/share/doc/nano
install -m 0644 /usr/ports/editors/nano/work/nano-7.0/doc/rnano.1.html /usr/ports/editors/nano/work/stage/usr/local/share/doc/nano
install -m 0644 /usr/ports/editors/nano/work/nano-7.0/doc/nanorc.5.html /usr/ports/editors/nano/work/stage/usr/local/share/doc/nano
install -m 0644 /usr/ports/editors/nano/work/nano-7.0/doc/sample.nanorc /usr/ports/editors/nano/work/stage/usr/local/share/examples/nano
====> Compressing man pages (compress-man)
===> Installing for nano-7.0
===> Checking if nano is already installed
===> Registering installation for nano-7.0
Installing nano-7.0...
Einige Shells halten einen Cache von Befehlen, die in den im PATH-Umgebungsvariable angegebenen Verzeichnissen zugänglich sind, um Suchvorgänge nach der ausführbaren Datei dieser Befehle zu beschleunigen. Benutzer der tcsh
-Shell müssen rehash
ausführen, um frisch installierte Befehle zu nutzen, ohne ihren vollständigen Pfad anzugeben:
rehash
Verwenden Sie stattdessen hash -r
für die sh
-Shell.
Während der Installation wird ein Arbeitsunterordner erstellt, der alle temporären Dateien enthält, die während der Kompilierung benötigt werden. Das Entfernen dieses Verzeichnisses spart Speicherplatz und verringert die Möglichkeit zukünftiger Probleme beim Upgrade auf eine nachfolgende Version des Ports. Um die temporären Kompilierungsdateien zu entfernen, führen Sie den nächsten Befehl aus.
make clean
Sie sollten die Ausgabe ähnlich der unten angegebenen für unser Beispiel sehen:
===> Cleaning for pkgconf-1.8.0_1,1
===> Cleaning for gettext-tools-0.21.1
===> Cleaning for libtextstyle-0.21.1
===> Cleaning for nano-7.0
Wie man die Ports-Installation anpasst?
Einige Ports bieten Build-Optionen, die verwendet werden können, um Anwendungsbestandteile zu aktivieren oder zu deaktivieren, Sicherheitsoptionen bereitzustellen oder andere Modifikationen vorzunehmen. security/gpgme
, www/firefox
und mail/sylpheed-claws
sind weitere Beispiele. Standardmäßig wird der Benutzer aufgefordert, aus einem Menü auszuwählen, was dazu führen kann, dass der Port mehrmals für Benutzerinteraktionen anhält, wenn er von anderen Ports mit anpassbaren Optionen abhängt. Um dies zu umgehen und den Port in einem einzigen Batch zu konfigurieren, führen Sie den nächsten Befehl innerhalb des Port-Skeletts aus:
make config-recursive
Dann bauen und installieren Sie den Port, indem Sie make install [clean]
ausführen.
Das Ziel all-depends-list
sammelt die Liste der Ports, die konfiguriert werden sollen, wenn config-recursive
verwendet wird. Um sicherzustellen, dass alle Abhängigkeitsoptionen angegeben wurden, wird empfohlen, make config-recursive
auszuführen, bis alle Abhängigkeitsportoptionen definiert sind und die Fenster für die Portoptionen nicht mehr angezeigt werden.
Es gibt viele Methoden, um das Build-Options-Menü eines Ports zurückzugeben, um diese Einstellungen hinzuzufügen, zu löschen oder zu ändern, nachdem der Port erstellt wurde. Eine Möglichkeit ist, in das Verzeichnis zu gehen, das den Port enthält, und dann make config
einzugeben. Eine weitere Alternative ist die Verwendung von make showconfig
. make rmconfig
wird alle zuvor angegebenen Parameter löschen und Ihnen ermöglichen, von vorne zu beginnen.
Das Ports-System lädt Quell-Dateien mit fetch
herunter, das mehrere Umgebungsvariablen unterstützt. Wenn das FreeBSD-System hinter einer Firewall oder einem FTP/HTTP-Proxy steht, müssen möglicherweise die Variablen FTP PASSIVE MODE, FTP PROXY und FTP PASSWORD konfiguriert werden.
Für Benutzer, die nicht immer mit dem Internet verbunden sind, kann make fetch
innerhalb von /usr/ports
ausgeführt werden, um alle Distfiles innerhalb einer Kategorie, wie z.B. /usr/ports/net
, oder innerhalb des Portskeletts selbst abzurufen. Beachten Sie, dass das Ausführen dieses Befehls innerhalb einer Kategorie oder eines Portskeletts, wenn ein Port Abhängigkeiten hat, die Distfiles von Ports aus einer anderen Kategorie nicht herunterlädt. Verwenden Sie stattdessen den nächsten Befehl, um die Distfiles für alle Abhängigkeiten eines Ports herunterzuladen:
make fetch-recursive
In außergewöhnlichen Umständen, wie zum Beispiel wenn eine Organisation ein lokales Distfiles-Repository pflegt, kann die MASTER SITES-Option verwendet werden, um die im Makefile angegebenen Download-Ziele zu überschreiben. Geben Sie den alternativen Speicherort an, wenn Sie Folgendes verwenden:
cd /usr/ports/directory
make MASTER SITE OVERRIDE= ftp:/ftp.org/pub/FreeBSD/ports/distfiles/ fetch
Die Variablen WRKDIRPREFIX und PREFIX können die Standardarbeits- und Zielverzeichnisse ändern. Zum Beispiel wird der folgende Befehl den Port in /usr/home/example/ports
kompilieren und alles unter /usr/local
installieren.
make WRKDIRPREFIX=/usr/home/example/ports install
Der nächste Befehl wird den Port in /usr/ports
kompilieren und in /usr/home/example/local
installieren.
make PREFIX=/usr/home/example/local install
Und der folgende Befehl wird die beiden kombinieren.
make WRKDIRPREFIX=../ports PREFIX=../local install
Diese können ebenfalls als Umgebungsvariablen gesetzt werden.
Wie entfernt man installierte Ports?
Sie können eine Anwendung ganz einfach löschen, indem Sie den folgenden Befehl ausführen:
make deinstall
Zum Beispiel, um nano
zu entfernen, führen Sie die nächsten Befehle aus:
cd /usr/ports/editors/nano
make deinstall
Sie sollten die Ausgabe ähnlich der unten angegebenen für unser Beispiel sehen:
===> Deinstalling for nano
===> Deinstalling nano-7.0
Updating database digests format: 100%
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):
Installed packages to be REMOVED:
nano: 7.0
Number of packages to be removed: 1
The operation will free 3 MiB.
[1/1] Deinstalling nano-7.0...
[1/1] Deleting files for nano-7.0: 100%
Es ist wichtig, die Warnungen zu lesen, bevor Sie den Port deinstallieren. Wenn der Port von einer App benötigt wird, wird diese Information angezeigt, aber der Port wird dennoch deinstalliert. In solchen Situationen kann es vorzuziehen sein, das Programm neu zu installieren, um beschädigte Abhängigkeiten zu vermeiden. Bitte geben Sie den zu übersetzenden Text ein.
Wie man installierte Ports anzeigt?
Um nur die Apps anzuzeigen, die mit dem Befehl "make" aus der Ports-Sammlung installiert wurden, verwenden Sie den folgenden Befehl:
pkg query -a '%n %R' | grep 'unknown-repository' | cut -d ' ' -f1
Der folgende Befehl kann verwendet werden, um eine Liste der installierten Apps zu überprüfen, obwohl er sowohl Anwendungen anzeigt, die über die Ports-Sammlung installiert wurden, als auch solche, die über das FreeBSD-Repository installiert wurden, das vorkompilierte Kopien der Ports-Sammlung enthält.
pkg info
Wie man Ports aktualisiert?
Neuere Versionen der Software werden im Laufe der Zeit zur Ports Collection hinzugefügt. Dieser Abschnitt erklärt, wie man herausfindet, ob Software aktualisiert werden kann und wie man sie aktualisiert.
Überprüfen Sie, ob die neueste Version des Ports-Baums installiert ist, indem Sie den Aktualisierungsbefehl aus der "Git-Methode" verwenden, um herauszufinden, ob neuere Versionen der installierten Ports verfügbar sind. Auf FreeBSD 10 und später, oder wenn das System auf pkg umgestellt wurde, listet der folgende Befehl veraltete installierte Ports auf:
pkg version -l "<"
Bevor Sie ein Upgrade versuchen, lesen Sie /usr/ports/UPDATING
von oben bis zum Datum, das dem letzten Upgrade der Ports oder der Installation des Systems entspricht. Diese Datei behandelt zahlreiche Bedenken und zusätzliche Maßnahmen, die Benutzer während der Aktualisierung eines Ports erleben und durchführen müssen, wie z.B. Änderungen des Dateiformats, Änderungen der Speicherorte von Konfigurationsdateien und etwaige Versionsinkompatibilitäten. Notieren Sie alle Anweisungen, die zu den Ports gehören, die ein Update benötigen, und befolgen Sie diese Anweisungen während des Abschlusses des Upgrades.
Die Ports Collection enthält die folgenden Werkzeuge für das eigentliche Upgrade:
-
Hafenmeister
-
Portupgrade
-
Synthese
Jede hat ihre eigenen Vor- und Nachteile. Historisch gesehen haben die meisten Installationen entweder Portmaster oder Portupgrade verwendet. Synthesis ist ein modernes Ersatzwerkzeug. Es liegt am Systemadministrator zu entscheiden, welches Werkzeug für ein bestimmtes System ideal ist. Bevor Sie eines dieser Programme verwenden, ist es eine bewährte Praxis, Ihre Daten zu sichern.
Wie man Ports mit Portmaster aktualisiert?
Das ports-mgmt/portmaster
-Paket oder -Port ist das bevorzugte Werkzeug zum Aktualisieren installierter Ports, da es darauf ausgelegt ist, die FreeBSD-Dienstprogramme zu nutzen, ohne zusätzliche Ports zu benötigen. Es nutzt den Inhalt des Verzeichnisses /var/db/pkg
, um zu entscheiden, welche Ports aktualisiert werden sollen. Um portmaster als Port zu installieren, führen Sie die folgenden Befehle aus:
cd /usr/ports/ports-mgmt/portmaster
make install clean
Portmaster identifiziert vier Hafen-Kategorien:
-
Wurzelport: Der Wurzelport hat keine Abhängigkeiten und keine Abhängigkeiten.
-
Trunk-Port: Der Trunk-Port hat keine Abhängigkeiten, ist aber von anderen Ports abhängig.
-
Zweigport: Der Branch-Port hat Abhängigkeiten und ist von anderen Ports abhängig.
-
Blattport: Blattport hat Abhängigkeiten, ist aber von keinem anderen Port abhängig.
Um diese Kategorien aufzulisten und nach Updates zu suchen, führen Sie den nächsten Befehl aus:
portmaster -L
Sie sollten die Ausgabe sehen, die der unten angegebenen für unser Beispiel ähnelt:
===>>> Root ports (No dependencies, not depended on)
===>>> dialog4ports-0.1.6_1
===>>> pkg-1.19.0
===>>> pkgconf-1.8.0_1,1
===>>> portmaster-3.22
===>>> 4 root ports
===>>> Trunk ports (No dependencies, are depended on)
===>>> autoconf-switch-20220527
===>>> db5-5.3.28_9
===>>> indexinfo-0.3.1
===>>> libedit-3.1.20221030,1
===>>> libiconv-1.17
===>>> libunwind-20211201_1
===>>> libyaml-0.2.5
===>>> perl5-5.32.1_3
===>>> 8 trunk ports
===>>> Branch ports (Have dependencies, are depended on)
===>>> autoconf-2.71
===>>> gettext-runtime-0.21.1
===>>> libffi-3.4.4
===>>> libtextstyle-0.21.1
===>>> m4-1.4.19,1
===>>> p5-Locale-gettext-1.07
===>>> p5-Locale-libintl-1.32
===>>> p5-Text-Unidecode-1.30
===>>> p5-Unicode-EastAsianWidth-12.0
===>>> ruby-3.0.5,1
===>>> ruby30-bdb-0.6.6_8
===>>> ruby30-gems-3.3.23
===>>> rubygem-psych-4.0.6
===>>> rubygem-stringio-3.0.2
===>>> 14 branch ports
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.16.5
===>>> gettext-tools-0.21.1
===>>> gmake-4.3_2
===>>> help2man-1.49.2
===>>> portupgrade-2.4.16,2
===>>> rubygem-rdoc-6.5.0
===>>> texinfo-6.8_3,1
===>>> 7 leaf ports
===>>> 33 total installed ports
===>>> There are no new versions available
Sie können den folgenden Befehl ausführen, um alle veralteten Ports zu aktualisieren:
portmaster -a
Bevor ein vorhandener Port entfernt wird, erstellt Portmaster standardmäßig ein Backup-Paket. Wenn die neue Version erfolgreich installiert ist, wird Portmaster das Backup entfernen. Die Verwendung von -b
weist Portmaster an, das Backup nicht automatisch zu löschen. Durch das Hinzufügen von -i
wird Portmaster im interaktiven Modus gestartet, der vor dem Aktualisieren jedes Ports um Zustimmung bittet. Es gibt mehrere verfügbare Alternativen.
Sie können -f
hinzufügen, um alle Ports zu aktualisieren und neu zu erstellen, falls während des Aktualisierungsprozesses ein Problem auftritt:
portmaster -af
Portmaster kann auch verwendet werden, um neue Ports zu installieren, indem alle Abhängigkeiten aktualisiert werden, bevor der neue Port erstellt und installiert wird. Um diese Funktion zu nutzen, definieren Sie den Speicherort des Ports in der Ports Collection:
portmaster shells/bash
Wie man Ports mit portupgrade aktualisiert?
ports-mgmt/portupgrade
ist ein zusätzliches Werkzeug zum Aktualisieren von Ports. Es installiert eine Sammlung von Port-Management-Software. Es ist jedoch von Ruby abhängig.
Um den portupgrade
-Port zu installieren, führen Sie die folgenden Befehle aus:
cd /usr/ports/ports-mgmt/portupgrade
make install clean
Verwenden Sie den folgenden Befehl, um alle veralteten Ports auf dem System zu aktualisieren.
portupgrade -a
Alternativ können Sie -i
hinzufügen, um eine Bestätigung für jedes einzelne Upgrade anzufordern:
portupgrade -ai
Verwenden Sie portupgrade pkgname
, um ein einzelnes Programm anstelle aller zugänglichen Ports zu aktualisieren. Es ist wichtig, -R hinzuzufügen, um zuerst alle Ports zu aktualisieren, die von der angegebenen Anwendung benötigt werden:
portupgrade -R firefox
Wenn -P
verwendet wird, durchsucht Portupgrade die in PKG PATH angegebenen lokalen Verzeichnisse nach verfügbaren Paketen. Wenn keine lokal zugänglich sind, werden Pakete von einem entfernten Server heruntergeladen. Wenn keine Pakete lokal oder remote gefunden werden können, verwendet Portupgrade Ports. Geben Sie -PP
an, um die Verwendung von Ports vollständig zu vermeiden. Diese letzte Gruppe von Einstellungen weist Portupgrade an, abzubrechen, wenn keine zugänglichen Pakete vorhanden sind:
portupgrade -PP gnome3
Verwenden Sie -F
, um nur die Port-Distributionsdateien oder Pakete zu erhalten, wenn -P
angegeben ist, ohne irgendetwas zu bauen oder zu installieren.
Wie verwaltet man die Festplattengröße mit Ports?
Die Verwendung der Ports Collection wird letztendlich Speicherplatz beanspruchen. Nachdem ein Port gebaut und installiert wurde, wird das Ausführen von make clean
im Portskelett das temporäre Arbeitsverzeichnis löschen. Es sei denn, -K
wird angegeben, Portmaster wird dieses Verzeichnis nach der Installation eines Ports automatisch löschen. Wenn Portupgrade installiert ist, löscht der folgende Befehl alle Arbeitsordner aus der lokalen Kopie der Ports Collection:
portsclean -C
Sie sollten die Ausgabe sehen, die der unten angegebenen für unser Beispiel ähnelt:
Cleaning out /usr/ports/*/*/work...
Delete /usr/ports/converters/p5-Text-Unidecode/work
Delete /usr/ports/databases/db5/work
Delete /usr/ports/databases/ruby-bdb/work
Delete /usr/ports/devel/autoconf/work
Delete /usr/ports/devel/autoconf-switch/work
Delete /usr/ports/devel/automake/work
Delete /usr/ports/devel/gmake/work
Delete /usr/ports/devel/libedit/work
Delete /usr/ports/devel/libffi/work
Delete /usr/ports/devel/libunwind/work
Delete /usr/ports/devel/m4/work
Delete /usr/ports/devel/p5-Locale-gettext/work
Delete /usr/ports/devel/p5-Locale-libintl/work
Delete /usr/ports/devel/ruby-gems/work
Delete /usr/ports/devel/rubygem-rdoc/work
Delete /usr/ports/devel/rubygem-stringio/work
Delete /usr/ports/lang/perl5.32/work
Delete /usr/ports/lang/ruby30/work
Delete /usr/ports/misc/help2man/work
Delete /usr/ports/ports-mgmt/portupgrade/work
Delete /usr/ports/print/texinfo/work
Delete /usr/ports/textproc/libyaml/work
Delete /usr/ports/textproc/p5-Unicode-EastAsianWidth/work
Delete /usr/ports/textproc/rubygem-psych/work
done.
Zusätzlich sammeln sich im Laufe der Zeit veraltete Quellverteilungsdateien in /usr/ports/distfiles
. Um alle Distfiles zu entfernen, die von keinem Port mehr referenziert werden, verwenden Sie Portupgrade und führen Sie den folgenden Befehl aus:
portsclean -D
Portupgrade kann alle Distfiles löschen, die derzeit von keinem installierten Port referenziert werden:
portscleaning -DD
Sie können den folgenden Befehl delete distfiles verwenden, wenn Portmaster installiert ist:
portmaster - -clean-distfiles
Dieser Befehl ist standardmäßig interaktiv und fordert den Benutzer zur Bestätigung auf, bevor eine Distdatei gelöscht wird.
Zusätzlich zu diesen Operationen automatisiert ports-mgmt/pkg_cutleaves
die Entfernung von nicht mehr benötigten installierten Ports.
Wie baut man Pakete mit Poudriere?
Poudriere ist eine BSD-lizenzierte Anwendung zur Entwicklung und Testung von FreeBSD-Paketen. Es erstellt isolierte Kompilierungsumgebungen mithilfe von FreeBSD-Jails. Diese Jails können verwendet werden, um Pakete für FreeBSD-Versionen zu erstellen, die nicht auf dem Host-System installiert sind, sowie Pakete für i386, wenn der Host eine amd64-Maschine ist. Sobald die Pakete erstellt wurden, ähnelt ihr Layout dem der offiziellen Spiegel. Diese Pakete sind mit pkg
und anderen Paketverwaltungstools kompatibel.
Die Installation von Poudriere erfordert das Paket oder den Port ports-mgmt/poudriere
.
pkg install poudriere
Der Installer enthält die Beispielkonfigurationsdatei /usr/local/etc/poudriere.conf.sample
. Diese Datei sollte nach /usr/local/etc/poudriere.conf
kopiert werden.
cp /usr/local/etc/poudriere.conf.sample /usr/local/etc/poudriere.conf
Bearbeiten Sie die übertragene Datei, um sie an die lokale Umgebung anzupassen.
ZFS ist für Systeme, die Poudriere ausführen, nicht notwendig, wird jedoch empfohlen. ZPOOL muss in /usr/local/etc/poudriere.conf
definiert werden und FREEBSD HOST muss auf einen nahegelegenen Spiegel gesetzt werden, wenn ZFS verwendet wird. CCACHE DIR ermöglicht die Verwendung von devel/ccache
, um die Kompilierung zu cachen und die Build-Zeiten für regelmäßig erstellten Code zu minimieren. Das Platzieren von Poudriere-Datensätzen in einem isolierten Verzeichnisbaum, der unter /poudriere
gemountet ist, kann praktisch sein. Die Standardwerte der anderen Konfigurationseinstellungen sind angemessen.
ZPOOL=zroot
FREEBSD_HOST=ftp://ftp.freebsd.org
Die Anzahl der erkannten CPU-Kerne wird verwendet, um die Anzahl der gleichzeitig laufenden Builds zu bestimmen. Stellen Sie ausreichend virtuellen Speicher durch RAM oder Swap-Space zur Verfügung. Wenn der virtuelle Speicher erschöpft ist, werden die Kompilierungsgefängnisse beendet und zerstört, was zu seltsamen Fehlermeldungen führt.
Wie man Jails und Port Trees initialisiert?
Initialisieren Sie poudriere, damit es nach der Konfiguration Jails mit dem benötigten FreeBSD-Baum und einem Ports-Baum installiert. Geben Sie den Namen der Jail mit der -j
Option und die FreeBSD-Version mit der -v
Option an. Auf Systemen, die FreeBSD/amd64 ausführen, kann -a
verwendet werden, um die Architektur entweder auf i386 oder amd64 zu ändern. Die Standardarchitektur wird durch uname
bestimmt.
poudriere jail -c -j 13amd64 -v 13.1-RELEASE
Sie sollten die Ausgabe ähnlich wie unten angegeben sehen:
[00:00:00] Creating 13amd64 fs at /usr/local/poudriere/jails/13amd64... done
[00:00:01] Using pre-distributed MANIFEST for FreeBSD 13.1-RELEASE amd64
[00:00:01] Fetching base for FreeBSD 13.1-RELEASE amd64
/usr/local/poudriere/jails/13amd64/fromftp/bas 186 MB 2652 kBps 01m12s
[00:01:15] Extracting base... done
[00:01:39] Fetching src for FreeBSD 13.1-RELEASE amd64
/usr/local/poudriere/jails/13amd64/fromftp/src 183 MB 2850 kBps 01m06s
[00:02:48] Extracting src... done
[00:03:22] Fetching lib32 for FreeBSD 13.1-RELEASE amd64
/usr/local/poudriere/jails/13amd64/fromftp/lib 63 MB 2810 kBps 23s
[00:03:47] Extracting lib32... done
[00:03:53] Cleaning up... done
[00:03:56] Recording filesystem state for clean... done
[00:03:56] Upgrading using http
/etc/resolv.conf -> /usr/local/poudriere/jails/13amd64/etc/resolv.conf
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching public key from update1.freebsd.org... done.
Fetching metadata signature for 13.1-RELEASE from update1.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 290 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150....160....170....180....190....200....210....220....230....240....250....260....270....280....290 done.
Applying patches... done.
Fetching 1 files... done.
The following files will be removed as part of updating to
13.1-RELEASE-p5:
/usr/share/zoneinfo/SystemV
/usr/src/contrib/tzdata/pacificnew
/usr/src/contrib/tzdata/systemv
/usr/src/contrib/tzdata/yearistype.sh
/usr/src/contrib/tzdata/zoneinfo2tdf.pl
/var/db/etcupdate/current/etc/mtree/BSD.usr.dist
/var/db/etcupdate/log
/var/db/mergemaster.mtree
Installing updates...Scanning //usr/share/certs/blacklisted for certificates...
Scanning //usr/share/certs/trusted for certificates...
done.
13.1-RELEASE-p5
[00:05:05] Recording filesystem state for clean... done
[00:05:05] Jail 13amd64 13.1-RELEASE-p5 amd64 is ready to be used
poudriere ports -c -p local -m git+https
Sie sollten die Ausgabe ähnlich wie unten angegeben sehen:
[00:00:00] Creating local fs at /usr/local/poudriere/ports/local... done
[00:00:00] Cloning the ports tree... done
Poudriere can construct ports with many configurations, in several jails, and from separate port trees on a single machine. Sets are custom settings for certain pairings.
This setup puts a single make.conf
file in /usr/local/etc/poudriere.d
that is jail-
, port-
, and set-specific
. 13amd64-local-workstation-make.con
f is the filename formed by combining the jail name, port name, and set name in this case. At build time, the system make.con
f and this new file are concatenated to form the build jail's make.conf
.
In 13amd64-local-workstation-pkglist werden die zu erstellenden Pakete eingegeben:
editors/emacs
devel/git
ports-mgmt/pkg
...
Optionen und Abhängigkeiten sind für die bereitgestellten Ports eingerichtet:
poudriere options -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
Schließlich werden Pakete erstellt und ein Repository für Pakete angelegt:
poudriere bulk -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
Während der Ausführung zeigt das Drücken von Ctrl+t
den aktuellen Bauzustand an. Zusätzlich erstellt Poudriere Dateien in /poudriere/logs/bulk/jailname
, die ein Webserver nutzen könnte, um Konstruktionsinformationen anzuzeigen.
Die überarbeiteten Pakete sind nun nach Abschluss der Installation im Poudriere-Repository verfügbar.
Wie konfiguriert man pkg-Clients, um sich mit einem Poudriere-Repository zu integrieren?
Obwohl es möglich ist, sowohl ein benutzerdefiniertes Repository als auch das offizielle Repository gleichzeitig zu nutzen, ist es gelegentlich vorteilhaft, das offizielle Repository zu deaktivieren. Dies wird durch die Erstellung einer Konfigurationsdatei erreicht, die die offizielle Konfigurationsdatei ersetzt und deaktiviert. Erstellen Sie die Datei /usr/local/etc/pkg/repos/FreeBSD.conf
mit folgendem Inhalt:
FreeBSD:{ enabled: no enabled }
HTTP ist oft die effizienteste Methode, um ein Poudriere-Repository an Client-Computer bereitzustellen. Konfigurieren Sie einen Webserver, um das Paketverzeichnis bereitzustellen, zum Beispiel: /usr/local/poudriere/data/packages/13amd64
, wobei 13amd64
der Name des Builds ist.
Wenn die Paket-Repository-URL http://pkg.example.com/13amd64
ist, dann wäre die Repository-Konfigurationsdatei in /usr/local/etc/pkg/repos/custom.conf
:
custom: {
url: "http://pkg.example.com/13amd64",
enabled: yes,
}
Was sind die Überlegungen nach der Installation?
Die meisten Drittanbieterprogramme benötigen nach der Installation eine gewisse Konfiguration, unabhängig davon, ob das Produkt aus einem Binärpaket oder einem Port installiert wurde. Die folgenden Befehle und Orte können verwendet werden, um zu identifizieren, welche Komponenten des Programms installiert wurden: Bitte geben Sie den zu übersetzenden Text ein.
-
Die von den Apps bereitgestellte Dokumentation wird in
/usr/local/share/doc
installiert, und viele Anwendungen installieren zusätzlich Anleitungseiten. Dieses Material sollte vor dem Fortfahren überprüft werden. -
Die Mehrheit der Apps installiert standardmäßig mindestens eine Konfigurationsdatei in
/usr/local/etc
. Wenn eine Anwendung mehrere Konfigurationsdateien hat, wird ein Unterordner erstellt, um sie zu speichern. Häufig werden Beispielkonfigurationsdateien mit einem Suffix wie.sample
installiert. Die Konfigurationsdateien sollten überprüft und, falls erforderlich, angepasst werden, um den Anforderungen des Systems gerecht zu werden. Bevor Sie eine Beispiel-Datei ändern k önnen, müssen Sie sie zuerst ohne die.sample
-Endung kopieren. -
Einige Programme führen Dienste aus, die zu
/etc/rc.conf
hinzugefügt werden müssen, bevor die Anwendung gestartet werden kann. Typischerweise installieren diese Programme ein Startskript in/usr/local/etc/rc.d
.tippVon Design aus führen Apps während der Installation niemals ihr Startskript aus, noch ihr Stoppskript während der Deinstallation oder Aktualisierung. Diese Entscheidung liegt im Ermessen jedes Systemadministrators.
-
Verwenden Sie
pkg info
, um zu ermitteln, welche Dateien, Handbuchseiten und Binärdateien mit einem Programm installiert wurden. -
Benutzer von
csh
müssenrehash
ausführen, um die bekannte Binärdateiliste in der PATH-Umgebungsvariable neu zu erstellen.