Index: head/de_DE.ISO8859-1/books/handbook/jails/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/jails/chapter.xml (revision 48014) +++ head/de_DE.ISO8859-1/books/handbook/jails/chapter.xml (revision 48015) @@ -1,1059 +1,1060 @@ Jails MatteoRiondatoBeigetragen von OliverPeterÜbersetzt von DirkArlt JohannKois jails Übersicht Dieses Kapitel erklärt, was &os;-Jails sind und wie man sie einsetzt. Jails, manchmal als Ersatz für chroot-Umgebungen bezeichnet, sind ein sehr mächtiges Werkzeug für Systemadministratoren, jedoch kann deren grundlegende Verwendung auch für fortgeschrittene Anwender nützlich sein. Jails sind ein mächtiges Werkzeug, aber sie sind kein Sicherheits-"Allheilmittel". Es ist wichtig zu beachten, dass es für einen Prozess in der Jail nicht möglich ist, von selbst auszubrechen. Es gibt jedoch Möglichkeiten, in denen ein unpriviligierter Benutzer außerhalb der Jail, mit einem priviligierten Benutzer innerhalb der Jail kooperiert, und somit erhöhte Rechte in der Host-Umgebung erlangt. Den meisten dieser Angriffe kann vorgebeugt werden, indem sichergestellt wird, dass das Rootverzeichnis der Jail für unpriviligierte Benutzer der Host-Umgebung nicht zugänglich ist. Nachdem Sie dieses Kapitel gelesen haben, werden Sie Wissen, was eine Jail ist und welche Verwendungszwecke es dafür unter &os; gibt. Wissen, wie man eine Jail erstellt, startet und und anhält. Die Grundlagen der Jail-Administration (sowohl innerhalb als auch ausserhalb des Jails) kennen. Weitere nützliche Informationen über Jails sind beispielsweise in folgenden Quellen zu finden: Der &man.jail.8; Manualpage. Diese umfassende Referenz beschreibt, wie man unter &os; eine Jail startet, anhält und kontrolliert. Den Mailinglisten und deren Archive. Die Archive der Mailingliste &a.questions; und anderen Mailinglisten, welche vom &a.mailman.lists; bereitgestellt werden, beinhalten bereits umfangreiche Informationen zu Jails. Daher ist es sinnvoll, bei Problemen mit Jails zuerst die Archive der Mailinglisten zu durchsuchen, bevor Sie eine neue Anfrage auf der Mailingliste &a.questions.name; stellen. Jails - Definitionen Um die für den Einsatz von Jails benötigten FreeBSD-Funktionen, deren Interna sowie die Art und Weise, mit der diese mit anderen Teilen des Betriebssystems interagieren, zu erläutern, werden in diesem Kapitel folgende Definitionen verwendet: &man.chroot.8; (-Befehl) Ein Werkzeug, das den &os;-Systemaufruf &man.chroot.2; verwendet, um das Wurzelverzeichnis eines Prozesses und all seiner Nachkömmlinge zu ändern. &man.chroot.2; (-Umgebung) Die Umgebung eines Prozesses, der in einem chroot läuft. Diese beinhaltet Ressourcen, wie zum Beispiel sichtbare Abschnitte des Dateisystems, verfügbare Benutzer- und Gruppenkennungen, Netzwerkschnittstellen und weitere IPC-Mechanismen und so weiter. &man.jail.8; (-Befehl) Das Systemadministrationswerkzeug, welches es erlaubt, Prozesse innerhalb der Jail-Umgebung zu starten. Host (-Benutzer, -Prozess, -System) Das verwaltende System einer Jail-Umgebung. Das Host-System hat Zugriff auf alle verfügbaren Hardwareressourcen und kann sowohl innerhalb als auch ausserhalb der Jail-Umgebung Prozesse steuern. Einer der wichtigsten Unterschiede des Host-System einer Jails ist, dass die Einschränkungen, welche für die Superuser-Prozesse innerhalb eines Jails gelten, nicht für die Prozesse des Host-Systems gelten. Gast (-Benutzer, -Prozess, -System) Ein Prozess, ein Benutzer oder eine andere Instanz, deren Zugriff durch eine &os;-Jail eingeschränkt ist. Einführung Da die Systemadministration oft eine schwierige Aufgabe ist, wurden viele mächtige Werkzeuge entwickelt, die Administratoren bei Installation, Konfiguration und Wartung ihrer Systeme unterstützen sollen. Eine wichtige Aufgabe eines Administrators ist es, Systeme so abzusichern, dass es im regulären Betrieb zu keinen Sicherheitsverstößen kommt. Eines der Werkzeuge, mit dem die Sicherheit eines &os;-Systems verbessert werden kann, sind Jails. Jails wurden schon in &os; 4.X von &a.phk.email; eingeführt, wurden jedoch mit &os; 5.X stark verbessert, sodass sie inzwischen zu einem mächtigen und flexiblen Subsystem herangereift sind. Trotzdem geht die Entwicklung nach wie vor weiter. Wichtige Ziele sind derzeit: Bessere Zweckmäßigkeit, Leistung, Ausfallsicherheit und allgemeine Sicherheit. Was ist eine Jail? BSD-ähnliche Betriebssysteme besitzen seit den Zeiten von 4.2BSD &man.chroot.2;. Das Werkzeug &man.chroot.2; kann dazu benutzt werden, das root-Verzeichnis einer Reihe von Prozessen zu ändern, um so eine seperate sichere Umgebung (abgeschnitten vom Rest des Systems) zu schaffen. Prozesse, die in einer chroot-Umgebung erstellt wurden, können nicht auf Dateien oder Ressourcen zugreifen, die sich ausserhalb der Umgebung befinden. Dadurch ist es einem kompromittierten Dienst nicht möglich, das gesamte System zu kompromittieren. &man.chroot.8; eignet sich für einfache Aufgaben, die keine flexiblen, komplexen oder fortgeschrittenen Funktionen benötigen. Obwohl seit der Entwicklung des chroot-Konzepts zahlreiche Sicherheitslöcher geschlossen wurden, die es einem Prozess erlauben konnten, aus einer Jail auszubrechen, war seit langer Zeit klar, dass &man.chroot.2; nicht die ideale Lösung ist, einen Dienst sicher zu machen. Dies ist einer der Hauptgründe, warum Jails entwickelt wurden. Jails setzen auf dem traditionellen &man.chroot.2;-Konzept auf und verbessern es auf unterschiedlichste Art und Weise. In einer traditionellen &man.chroot.2;-Umgebung sind Prozesse auf den Bereich des Dateisystems beschränkt, auf den sie zugreifen können. Der Rest der Systemressourcen (wie zum Beispiel eine Reihe von Systembenutzern, die laufenden Prozesse oder das Netzwerk-Subsystem) teilen sich die chroot-Prozesse mit dem Host-System. Jails dehnen dieses Modell nicht nur auf die Virtualisierung des Zugriffs auf das Dateisystem, sondern auch auf eine Reihe von Benutzern, das Netzwerk-Subsystem des &os;-Kernels und weitere Bereiche aus. Eine ausführlichere Übersicht der ausgefeilten Bedienelemente zur Konfiguration einer Jail-Umgebung finden Sie im Abschnitt des Handbuchs. Eine Jail zeichnet sich durch folgende Merkmale aus: Einen Unterverzeichnisbaum, der die Jail enthält. Einem Prozess, der innerhalb der Jail läuft, ist es nicht mehr möglich, aus diesem auszubrechen. Von der traditionellen &man.chroot.2;-Umgebung bekannte Sicherheitsprobleme existieren bei &os;-Jails nicht mehr. Einen Hostname, der innerhalb der Jail verwendet wird. Jails werden vor allem dazu verwendet, Netzwerkdienste anzubieten, daher ist es für Systemadministratoren von großem Nutzen, dass jede Jail einen beschreibenden Hostname haben kann. Eine IP Adresse, die der Jail zugewiesen wird und nicht verändert werden kann, solange das Jail läuft. Die IP-Adresse einer Jails ist üblicherweise ein Adress-Alias auf eine existierende Netzwerkschnittstelle. Dies ist jedoch nicht zwingend erforderlich. Einen Befehl (genauer den Pfad einer ausführbaren Datei) der innerhalb der Jail ausgeführt werden soll. Dieser Pfad wird relativ zum root-Verzeichnis einer Jail-Umgebung angegeben. Unabhängig davon können Jails eine Reihe eigener Benutzer und einen eigenen Benutzer root haben. Selbstverständlich sind die Rechte des Benutzers root nur auf die Jail-Umgebung beschränkt. Aus der Sicht des Host-Systems ist der Benutzer root der Jail-Umgebung kein allmächtiger Benutzer, da der Benutzer root der Jail-Umgebung nicht dazu berechtigt ist, kritische Operationen am System ausserhalb der angebundenen &man.jail.8;-Umgebung durchzuführen. Weitere Informationen über die Einsatzmöglichkeiten und Beschränkungen des Benutzers root werden im Abschnitt des Handbuchs besprochen. Einrichtung und Verwaltung von Jails Einige Administratoren unterscheiden zwei verschiedene Jail-Arten: Komplette Jails, die ein echtes &os; darstellen und Jails für einen bestimmten Dienst, die nur einer bestimmten Anwendung oder einem Dienst (der möglicherweise mit besonderen Privilegien laufen soll) gewidmet sind. Dies ist aber nur eine konzeptuelle Unterscheidung, die Einrichtung einer Jail bleibt davon gänzlich unberührt. &prompt.root; setenv D /hier/ist/die/jail &prompt.root; mkdir -p $D &prompt.root; cd /usr/src &prompt.root; make buildworld &prompt.root; make installworld DESTDIR=$D &prompt.root; make distribution DESTDIR=$D &prompt.root; mount -t devfs devfs $D/dev Das Festlegen des Installationsorts für das Jail eignet sich am besten als Startpunkt. Hier wird sich die Jail innerhalb des Host-Dateisystems befinden. Eine gute Möglichkeit wäre etwa /usr/jail/name_der_jail, wobei name_der_jail den Hostname darstellt, über den die Jail identifiziert werden soll. Das Dateisystem unterhalb von /usr/ stellt normalerweise aussreichend Platz für eine Jail zur Verfügung (bedenken Sie, dass eine komplette Jail ein Replikat einer jeden Datei der Standardinstallation des &os;-Basissystems enthält. Wenn Sie bereits ihre Systemanwendungen mittels make world oder make buildworld neu erstellt haben, können Sie diesen Schritt überspringen und die Systemanwendungen in die neue Jail installieren. Dieser Befehl wird den Verzeichnisbaum mit allen notwendigen Binärdateien, Bibliotheken, Manualpages usw. erstellen. Der distribution-Befehl lässt make alle benötigten Konfigurationsdateien installieren, es werden also alle installierbaren Dateien aus /usr/src/etc/ in das Verzeichnis /etc der Jail installiert (also nach $D/etc/). Das Einhängen des &man.devfs.8;-Dateisystems innerhalb der Jail ist nicht unbedingt notwendig. Allerdings benötigt fast jede Anwendung Zugriff auf wenigstens ein Gerät. Es ist daher sehr wichtig, den Zugriff auf Devices aus der Jail heraus zu kontrollieren, da unsaubere Einstellungen es einem Angreifer erlauben könnten, in das System einzudringen. Die Kontrolle über &man.devfs.8; erfolgt durch die in den Manualpages &man.devfs.8; und &man.devfs.conf.5; beschriebenen Regeln. Ist eine Jail einmal erst erstellt, kann sie durch &man.jail.8; gestartet werden. &man.jail.8; benötigt zwingend mindestens vier Argumente, die im Abschnitt des Handbuchs beschrieben sind. Weitere Argumente sind möglich, um beispielsweise die Jail mit den Berechtigungen eines bestimmten Benutzers laufen zu lassen. Das Argument hängt vom Typ der Jail ab; für ein virtuelles System ist /etc/rc eine gute Wahl, da dies dem Startvorgang eines echten &os;-Systems entspricht. Bei einer Service-Jail hängt dieses von der Art des Dienstes ab, der in der Jail laufen soll. Jails werden häufig mit dem Betriebssystem gestartet, da der rc-Mechanismus von &os; dafür eine einfach zu realisierende Möglichkeit bietet. Eine Liste der Jails, die mit dem Betriebssystem gestartet werden sollen, wird in die Datei &man.rc.conf.5; geschrieben: jail_enable="YES" # Set to NO to disable starting of any jails jail_list="www" # Space separated list of names of jails Die Namen der Jails in der jail_list sollten nur alphanumerische Zeichen enthalten. Für jede Jail in der jail_list sollten in &man.rc.conf.5; einige Einstellungen vorgenommen werden: jail_www_rootdir="/usr/jail/www" # jail's root directory jail_www_hostname="www.example.org" # jail's hostname jail_www_ip="192.168.0.10" # jail's IP address jail_www_devfs_enable="YES" # mount devfs in the jail jail_www_devfs_ruleset="www_ruleset" # devfs ruleset to apply to jail Beim Start einer in &man.rc.conf.5; konfigurierten Jail wird das /etc/rc-Skript der Jail (das "annimmt", dass es sich in einem kompletten System befindet) aufgerufen. Für Service-Jails sollten die Startskripte der Jail durch das Setzen der Option jail_jailname_exec_start entsprechend angepasst werden. Eine vollständige Liste der Optionen findet sich in der Manualpage zu &man.rc.conf.5;. &man.service.8; kann zum manuellen Starten und Stoppen der Jail genutzt werden, wenn ein Eintrag in rc.conf angelegt wurde: &prompt.root; service jail start www &prompt.root; service jail stop www Es gibt momentan keinen sauberen Weg, eine &man.jail.8; zu stoppen. Dies liegt daran, dass die Kommandos zum sauberen Herunterfahren eines Systems innerhalb einer Jail nicht ausgeführt werden können. Der beste Weg eine Jail zu beenden ist es daher, innerhalb der Jail den folgenden Befehl auszuführen (alternativ können Sie auch &man.jexec.8; von außerhalb der Jail aufrufen): &prompt.root; sh /etc/rc.shutdown Weitere Informationen zu diesem Thema finden Sie in der Manualpage &man.jail.8;. Feinabstimmung und Administration Es gibt verschiedene Optionen, die für jede Jail gesetzt werden können und verschiedene Wege, ein &os;-Host-System mit Jails zu kombinieren. Dieser Abschnitt zeigt Ihnen: Einige zur Verfügung stehende Optionen zur Abstimmung des Verhaltens und der Sicherheitseinstellungen, die mit einer Jail-Installation ausgeführt werden können. Einige der Anwendungsprogramme für das Jail-Management, die über die &os; Ports-Sammlung verfügbar sind und genutzt werden können, um Jail-basierte Lösungen allumfassend umzusetzen. Systemwerkzeuge zur Feinabstimmung von Jails in &os; Die Feinabstimmung einer Jail-Konfiguration erfolgt zum Großteil durch das Setzen von &man.sysctl.8;-Variablen. Es gibt einen speziellen sysctl-Zweig, der als Basis für die Organisation aller relevanten Optionen dient: Die security.jail.*-Hierarchie der &os;-Kerneloptionen. Die folgende Liste enthält alle jail-bezogenen sysctls (inklusiver ihrer Voreinstellungen). Die Namen sollten selbsterklärend sein, für weitergehende Informationen lesen Sie bitte die Manualpages &man.jail.8; und &man.sysctl.8;. security.jail.set_hostname_allowed: 1 security.jail.socket_unixiproute_only: 1 security.jail.sysvipc_allowed: 0 security.jail.enforce_statfs: 2 security.jail.allow_raw_sockets: 0 security.jail.chflags_allowed: 0 security.jail.jailed: 0 Diese Variablen können vom Administrator des Host-Systems genutzt werden, um Beschränkungen hinzuzufügen oder aufzuheben, die dem Benutzer root als Vorgabe auferlegt sind. Beachten Sie, dass es einige Beschränkungen gibt, die nicht verändert werden können. Der Benutzer root darf innheralb der &man.jail.8; keine Dateisysteme mounten und unmounten. Ebenso ist es ihm untersagt, das &man.devfs.8;-Regelwerk zu laden oder zu entladen. Er darf weder Firewallregeln setzen, noch administrative Aufgaben erledigen, die Modifikationen am Kernel selbst erfordern (wie bespielsweise das Setzen des Securelevels des Kernel. Das &os;-Basissystem enthält einen Basissatz an Werkzeugen, um Informationen über aktive Jails zu erlangen und einer Jail administrative Befehle zuzuordnen. Die Befehle &man.jls.8; und &man.jexec.8; sind Teil des &os;-Basissystems und können für folgende Aufgaben verwendet werden: Das Anzeigen einer Liste der aktiven Jails und ihrer zugehörigen Jail Identifier (JID), ihrer IP-Addresse, ihres Hostnames und ihres Pfades. Das Herstellen einer Verbindung mit einer laufenden Jail, das Starten eines Befehls aus dem gastgebenen System heraus oder das Ausführen einer administrativen Aufgabe innerhalb der Jail selbst. Dies ist insbesondere dann nützlich, wenn der Benutzer root die Jail sauber herunterfahren möchte. &man.jexec.8; kann auch zum Starten einer Shell innerhalb der Jail genutzt werden, um adminstrative Aufgaben durchzuführen: &prompt.root; jexec 1 tcsh High-Level-Werkzeuge zur Jail-Administration in der &os; Ports-Sammlung Unter den zahlreichen Fremdwerkzeugen für die Administration von Jails sind die sysutils/jailutils die vollständigsten und brauchbarsten. Dabei handelt es sich um eine Sammlung kleiner Anwendungen, die das &man.jail.8;-Management vereinfachen. Weitere Informationen zu diesen Werkzeugen finden Sie auf den entsprechenden Internetseiten. Anwendung von Jails Service-Jails DanielGerzoBeigetragen von Dieser Abschnitt basiert auf einer von &a.simon.email; auf http://simon.nitro.dk/service-jails.html präsentierten Idee und einem aktualisierten Artikel von Ken Tom (locals@gmail.com). Er beschreibt, wie ein &os;-System durch Benutzung der &man.jail.8;-Funktion mit zusätzlichen Sicherheitsebenen ausgestattet werden kann. Es wird dabei angenommen, dass auf Ihrem &os;-System RELENG_6_0 oder neuer installiert ist und dass Sie die Informationen aus den vorangehenden Abschnitten gelesen und verstanden haben. Design Eines der Hauptprobleme bei Jails ist das Management ihres Upgrade-Prozesses. Dieser neigt dazu, problematisch zu sein, da jede Jail bei jedem Upgrade komplett neu gebaut werden muss. Das stellt normalerweise kein Problem dar, wenn es sich um eine einzelne Jail handelt, da der Upgrade-Prozess recht einfach ist. Verwenden Sie aber eine größere Anzahl von Jails, kann dieser Prozess sehr zeitaufwendig werden. Diese Konfiguration erfordert fortgeschrittene Kenntnisse im Umgang mit &os; sowie der Benutzung seiner Funktionen. Sollten die unten vorgestellten Schritte zu kompliziert wirken, wird empfohlen, sich einfachere Verfahren wie sysutils/ezjail anzusehen, da diese einfachere Methoden zur Administration von Jails verwenden und daher nicht so anspruchsvoll sind wie der hier beschriebene Aufbau. Diese Konfiguration basiert darauf, Jails so weit als möglich gemeinsam zu verwalten. Dies passiert auf sichere Art und Weise durch den Einsatz von &man.mount.nullfs.8;-Mounts (read-only). Dadurch werden Aktualisierungen erleichtert und das Verteilen von verschiedenen Diensten auf verschiedene Jails wird attraktiver. Außerdem bietet dieses Verfahren einen einfachen Weg, Jails hinzuzufügen, zu entfernen und zu aktualisieren. Beispiele für Dienste sind in diesem Zusammenhang: Ein HTTP-Server, ein DNS-Server, ein SMTP-Server und so weiter. Die Ziele des in diesem Abschnitt beschriebenen Aufbaus sind: Das Erstellen einer einfachen und gut verständlichen Struktur von Jails. Dies beinhaltet, nicht für jede Jail ein vollständiges installworld laufen lassen zu müssen. Es einfach zu machen, neue Jails zu erstellen oder alte zu entfernen. Es einfach zu machen, bestehende Jails zu aktualisieren. Es einfach zu machen, einen angepassten &os;-Zweig zu nutzen. Paranoid bezüglich Sicherheit zu sein und Angriffsmöglickeiten weitgehend zu reduzieren. Soviel Platz und Inodes wie möglich einzusparen. Wie bereits erwähnt, ist dieses Design stark darauf angewiesen, dass eine read-only-Hauptvorlage in jede Jail hinein gemountet wird (bekannt als nullfs), und dass jede Jail über wenigstens ein beschreibbares Gerät verfügt. Das Gerät kann hierbei eine separate physikalische Platte oder ein vnode unterstütztes &man.md.4;-Gerät sein. Im folgenden Beispiel wird ein nullfs-Mount genutzt, auf den nur Lesezugriff erlaubt ist. Das Layout des Dateisystems wird in der folgenden Liste beschrieben: Jede Jail wird unterhalb des /home/j-Verzeichnisses gemountet. /home/j/mroot ist die Vorlage für jede Jail und die nur lesbare Partition für alle Jails. Unterhalb von /home/j wird für jede Jail ein leeres Verzeichnis angelegt. Jede Jail bekommt ein /s-Verzeichnis, das zum read/write-Teilbereich des Systems verlinkt wird. Jede Jail bekommt ihr eigenes read/write-System, das auf /home/j/skel basiert. Jeder Jailbereich (genauer der read/write-Teilbereich jeder Jail) wird in /home/js erstellt. Es wird angenommen, dass die Jails sich unterhalb des /home Verzeichnisses befinden. Dieser Ort kann von Ihnen natürlich geändert werden. Allerdings müssen die Pfade in den folgenden Beispielen dann entsprechend angepasst werden. Erstellen der Vorlage Dieser Abschnitt beschreibt die Schritte, die zum Erstellen der Hauptvorlage (die den nur lesbaren Bereich für alle weiteren Jails darstellt) notwendig sind. Es ist immer eine gute Idee, &os; auf den aktuellen -RELEASE-Zweig zu aktualisieren. Lesen Sie das entsprechende Kapitel des Handbuchs für Informationen zu diesem Thema. Selbst wenn Sie auf eine Aktualisierung des Betriebssystems verzichten, müssen Sie dennoch ein buildworld durchführen, um fortfahren zu können. Außerdem müssen Sie das Paket sysutils/cpdup installiert sein. In diesem Beispiel wird &man.portsnap.8; verwendet, um die aktuelle &os; Ports-Sammlung herunterzuladen. - Der Abschnitt Portsnap des - Handbuchs beschreibt, wie Sie dieses Werkzeug effektiv + Der Abschnitt Portsnap + des Handbuchs beschreibt, wie Sie dieses Werkzeug effektiv einsetzen. Zuerst erstellen wir eine Verzeichnissstruktur für das read-only-Dateisystem, das die &os;-Binärdateien für unsere Jails enthalten wird. Anschließend wechseln wir in den &os;-Quellcodebaum und installieren das read-only-Dateisystem in die (Vorlage-)Jail. &prompt.root; mkdir /home/j /home/j/mroot &prompt.root; cd /usr/src &prompt.root; make installworld DESTDIR=/home/j/mroot Als nächstes bereiten wir die Ports-Sammlung fü die Jails vor und kopieren den &os; Quellcodebaum in die Jail, da dieser für mergemaster benötigt wird: &prompt.root; cd /home/j/mroot &prompt.root; mkdir usr/ports &prompt.root; portsnap -p /home/j/mroot/usr/ports fetch extract &prompt.root; cpdup /usr/src /home/j/mroot/usr/src Danach wird die Struktur für den read/write-Bereich des Systems erstellt: &prompt.root; mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles &prompt.root; mv etc /home/j/skel &prompt.root; mv usr/local /home/j/skel/usr-local &prompt.root; mv tmp /home/j/skel &prompt.root; mv var /home/j/skel &prompt.root; mv root /home/j/skel Nutzen Sie mergemaster, um fehlende Konfigurationsdateien zu installieren. Anschließend werden die von mergemaster erstellten Extra-Verzeichnisse entfernt: &prompt.root; mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i &prompt.root; cd /home/j/skel &prompt.root; rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev Nun wird das read/write-Dateisystem mit dem read-only-Dateisystem verlinkt. Bitte vergewissern Sie sich, dass die symbolischen Links an den korrekten s/ Positionen erstellt werden. Echte Verzeichnisse oder an falschen Positionen erstellte Verzeichnisse lassen die Installation fehlschlagen. &prompt.root; cd /home/j/mroot &prompt.root; mkdir s &prompt.root; ln -s s/etc etc &prompt.root; ln -s s/home home &prompt.root; ln -s s/root root &prompt.root; ln -s ../s/usr-local usr/local &prompt.root; ln -s ../s/usr-X11R6 usr/X11R6 &prompt.root; ln -s ../../s/distfiles usr/ports/distfiles &prompt.root; ln -s s/tmp tmp &prompt.root; ln -s s/var var Zuletzt erstellen Sie eine allgemeine /home/j/skel/etc/make.conf mit folgendem Inhalt: WRKDIRPREFIX?= /s/portbuild Ein gesetztes WRKDIRPREFIX erlaubt es, die &os;-Ports innerhalb jeder Jail zu kompilieren. Das Ports-Verzeichnis ist Teil des read-only System. Der angepasste Pfad des WRKDIRPREFIX macht es möglich, innerhalb des read/write-Bereichs der Jail Ports zu bauen. Jails erstellen Da nun eine komplette &os;-Jailvorlage vorliegt, sind wir nun in der Lage, Jails einrichten und in /etc/rc.conf zu konfigurieren. Dieses Beispiel zeigt das Erstellen von drei Jails: NS, MAIL und WWW. Fügen Sie die folgenden Zeilen in /etc/fstab ein, damit die read-only-Vorlage und der read/write-Bereich für alle Jails verfügbar sind: /home/j/mroot /home/j/ns nullfs ro 0 0 /home/j/mroot /home/j/mail nullfs ro 0 0 /home/j/mroot /home/j/www nullfs ro 0 0 /home/js/ns /home/j/ns/s nullfs rw 0 0 /home/js/mail /home/j/mail/s nullfs rw 0 0 /home/js/www /home/j/www/s nullfs rw 0 0 Mit der Pass-Nummer 0 markierte Partitionen werden beim Booten des Systems nicht von &man.fsck.8; geprüft, mit 0 als Dump-Nummer markierte Partitonen werden von &man.dump.8; nicht gesichert. Wir wollen nicht, dass fsck unsere nullfs-Mounts prüft oder dass dump die nur lesbaren nullfs-Mounts unserer Jails sichert. Deshalb werden diese Bereiche in den letzten beiden Spalten der obenstehenden fstab mit 0 0 markiert. Konfigurieren Sie die Jails in /etc/rc.conf: jail_enable="YES" jail_set_hostname_allow="NO" jail_list="ns mail www" jail_ns_hostname="ns.example.org" jail_ns_ip="192.168.3.17" jail_ns_rootdir="/usr/home/j/ns" jail_ns_devfs_enable="YES" jail_mail_hostname="mail.example.org" jail_mail_ip="192.168.3.18" jail_mail_rootdir="/usr/home/j/mail" jail_mail_devfs_enable="YES" jail_www_hostname="www.example.org" jail_www_ip="62.123.43.14" jail_www_rootdir="/usr/home/j/www" jail_www_devfs_enable="YES" Der Grund dafür, dass die Variablen jail_name_rootdir nach /usr/home statt nach /home zeigen, liegt darin, dass der physikalische Pfad des /home-Verzeichnisses unter &os; /usr/home lautet. Die Variable jail_name_rootdir darf im Pfad aber keinen symbolischen Link enthalten, weil das Jail ansonsten nicht gestartet werden kann. Verwenden Sie &man.realpath.1;, um den korrekten Wert für diese Variable zu bestimmen. Weitere Informationen finden Sie im Security Advisory &os;-SA-07:01.jail. Erstellen Sie die notwendigen Mountpunkte für die nur lesbaren Bereiche jeder Jail: &prompt.root; mkdir /home/j/ns /home/j/mail /home/j/www Installieren Sie die read/write-Vorlage in jede Jail. Benutzen Sie hierfür sysutils/cpdup, welches es erleichtert, eine korrekte Kopie jedes Verzeichnisses zu erstellen: &prompt.root; mkdir /home/js &prompt.root; cpdup /home/j/skel /home/js/ns &prompt.root; cpdup /home/j/skel /home/js/mail &prompt.root; cpdup /home/j/skel /home/js/www An dieser Stelle werden die Jails erstellt und fü den Betrieb vorbereitet. Zuerst mounten Sie die notwendigen Dateisysteme für jede Jail und starten diese dann mit dem jail rc-Skript. &prompt.root; mount -a &prompt.root; service jail start Die Jails sollten nun laufen. Um zu prüfen, ob sie korrekt gestartet wurden, verwenden Sie &man.jls.8;. Nach dem Aufruf dieses Befehls sollten Sie eine Ausgabe ähnlich der folgenden erhalten: &prompt.root; jls JID IP Address Hostname Path 3 192.168.3.17 ns.example.org /home/j/ns 2 192.168.3.18 mail.example.org /home/j/mail 1 62.123.43.14 www.example.org /home/j/www An diesem Punkt sollte es möglich sein, sich an jeder Jail anzumelden, Benutzer anzulegen und Dienste zu konfigurieren. Die Spalte JID gibt die Jail-Identifikationsnummer jeder laufenden Jail an. Nutzen Sie den folgenden Befehl, um administrative Aufgaben in der Jail mit der JID 3 durchzuführen: &prompt.root; jexec 3 tcsh Jails aktualisieren Mit der Zeit wird es notwendig sein, das System auf eine neuere Version von &os; zu aktualisieren. Zum einen aus Sicherheitsgründen, zum anderen, um neu eingeführte Funktionen nutzen zu können, die für die bestehenden Jails sinnvoll sind. Das Design dieses Aufbaus bietet einen einfachen Weg, bestehende Jails zu aktualisieren. Zudem reduziert es die Downtime, da die Jails erst im allerletzten Schritt gestoppt werden müssen. Außerdem bietet es die Möglichkeit, zu älteren Versionen zurückzukehren, falls irgendwelche Probleme auftreten. Im ersten Schritt wird das Host-System aktualisiert. Anschließend wird eine temporäre neue read-only Vorlage /home/j/mroot2 erstellt. &prompt.root; mkdir /home/j/mroot2 &prompt.root; cd /usr/src &prompt.root; make installworld DESTDIR=/home/j/mroot2 &prompt.root; cd /home/j/mroot2 &prompt.root; cpdup /usr/src usr/src &prompt.root; mkdir s Der installworld-Durchlauf erzeugt einige unnötige Verzeichnisse, die nun entfernt werden sollten: &prompt.root; chflags -R 0 var &prompt.root; rm -R etc var root usr/local tmp Erzeugen Sie neue symbolische Links für das Hauptdateisystem: &prompt.root; ln -s s/etc etc &prompt.root; ln -s s/root root &prompt.root; ln -s s/home home &prompt.root; ln -s ../s/usr-local usr/local &prompt.root; ln -s ../s/usr-X11R6 usr/X11R6 &prompt.root; ln -s s/tmp tmp &prompt.root; ln -s s/var var Nun ist es an der Zeit, die Jails zu stoppen: &prompt.root; service jail stop Unmounten des originalen Dateisystems: &prompt.root; umount /home/j/ns/s &prompt.root; umount /home/j/ns &prompt.root; umount /home/j/mail/s &prompt.root; umount /home/j/mail &prompt.root; umount /home/j/www/s &prompt.root; umount /home/j/www Die read/write-Systeme sind an das read-only System angehängt (/s), das daher zuerst ausgehängt werden muss. Verschieben Sie das alte read-only-Dateisystem und ersetzen Sie es durch das neue Dateisystem. Das alte Dateisystem kann so als Backup dienen, falls etwas schief geht. Die Namensgebung entspricht hier derjenigen bei der Erstellung eines neuen read-only-Dateisystems. Verschieben Sie die originale &os; Ports-Sammlung in das neue Dateisystem, um Platz und Inodes zu sparen: &prompt.root; cd /home/j &prompt.root; mv mroot mroot.20060601 &prompt.root; mv mroot2 mroot &prompt.root; mv mroot.20060601/usr/ports mroot/usr Nun ist die neue read-only-Vorlage fertig. Sie müssen daher nur noch die Dateisysteme erneut mounten und die Jails starten: &prompt.root; mount -a &prompt.root; service jail start Nutzen Sie &man.jls.8; um zu prüfen, ob die Jails korrekt gestartet wurden. Vergessen Sie nicht, innerhalb jeder Jail mergemaster laufen zu lassen. Die Konfigurationsdateien müssen (ebenso wie die rc.d-Skripten) aktualisiert werden. Index: head/de_DE.ISO8859-1/books/handbook/ports/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/ports/chapter.xml (revision 48014) +++ head/de_DE.ISO8859-1/books/handbook/ports/chapter.xml (revision 48015) @@ -1,2004 +1,2001 @@ Installieren von Anwendungen: Pakete und Ports UwePierauÜbersetzt von Übersicht Ports Pakete &os; enthält eine umfassende Sammlung von Systemwerkzeugen, die Teil des Basissystems sind. Allerdings ist man früher oder später auf Software Dritter angewiesen, damit bestimmte Arbeiten durchgeführt werden können. Um diese Software zu installieren, stellt &os; zwei sich ergänzende Methoden zur Verfügung: Die Ports-Sammlung (zur Installation aus dem Quellcode) sowie Pakete (auch als Packages bezeichnet, zur Installation von vorkompilierten binären Softwarepaketen). Beide Methoden können benutzt werden, um Anwendungen von lokalen Medien oder über das Netzwerk zu installieren. Dieses Kapitel behandelt die folgenden Themen: Die Installation binärer Softwarepakete. Der Bau Software Dritter aus dem Quellcode mithilfe der Ports-Sammlung. Wie zuvor installierte Pakete oder Ports entfernt werden. Wie die Voreinstellungen der Ports-Sammlung überschrieben werden können. Die Suche nach geeigneter Software. Wie Anwendungen aktualisiert werden. Installation von Software Die typischen Schritte zur Installation von Drittanbieter-Software auf einem &unix; System sind: Download der Software, die als Quelltext oder im Binärformat vorliegen kann. Auspacken der Software, die typischerweise ein mit &man.compress.1;, &man.gzip.1; oder &man.bzip2.1; komprimiertes Tar-Archiv enthält. Durchsuchen der Dokumentation, die sich in INSTALL, README oder mehreren Dateien im Verzeichnis doc/ befindet, nach Anweisungen, wie die Software zu installieren ist. Kompilieren der Software wenn sie als Quelltext vorliegt. Dazu müssen Sie vielleicht das Makefile anpassen, oder configure laufen lassen, oder andere Arbeiten durchführen. Testen und installieren der Software. Wenn Sie Software installieren, die nicht speziell für &os; geschrieben wurde, müssen Sie vielleicht sogar den Quelltext anpassen, damit die Software funktioniert. &os; bietet zwei Technologien an, die diese Schritte für Sie durchführen. Zurzeit werden über &os.numports; Anwendungen Dritter zur Verfügung gestellt. Ein &os;-Paket enthält vorkompilierte Kopien aller Befehle für eine Anwendung, sowie zusätzliche Konfigurationsdateien und Dokumentation. Zur Handhabung der Pakete stellt &os; Kommandos wie &man.pkg.add.1;, &man.pkg.delete.1; und &man.pkg.info.1; zur Verfügung. Ein &os;-Port ist eine Sammlung von Dateien, die das Kompilieren der Quelltexte einer Anwendung automatisieren. Die Dateien, die ein Port umfasst enthalten alle notwendigen Informationen um die Anwendung herunterzuladen, zu extrahieren, anzupassen und zu installieren. Das Portsystem kann auch dazu benutzt werden, Pakete zu generieren, die mit den Paketverwaltungswerkzeugen von &os; manipuliert werden können. Pakete und Ports beachten Abhängigkeiten zwischen Anwendungen. Wenn &man.pkg.add.1; oder die Ports-Sammlung benutzt wird, um eine Anwendung zu installieren, dann werden fehlende Bibliotheken zuerst installiert, sofern sie nicht schon vorher installiert waren. Obwohl beide Technologien recht ähnlich sind, so haben Pakete und Ports jeweils ihre eigenen Stärken. Welche Technologie eingesetzt wird, hängt letzten Endes von den Anforderungen ab, die an eine bestimmte Anwendung gestellt werden. Vorteile von Paketen Das komprimierte Paket einer Anwendung ist normalerweise kleiner als das komprimierte Archiv der Quelltexte. Pakete müssen nicht mehr kompiliert werden. Dies ist ein Vorteil, wenn große Pakete wie Mozilla, KDE oder GNOME auf langsamen Maschinen installiert werden. Wenn Sie Pakete verwenden, brauchen Sie nicht zu verstehen, wie Software unter &os; kompiliert wird. Vorteile von Ports Da die Pakete auf möglichst vielen System laufen sollen, werden Optionen beim Übersetzen zurückhaltend gesetzt. Wird eine Anwendung über die Ports übersetzt, können die Optionen nach eigenen Bedürfnissen angepasst werden. Die Eigenschaften einiger Anwendungen werden über Optionen zum Zeitpunkt des Übersetzens festgelegt. Apache kann zum Beispiel über eine große Auswahl an eingebauten Optionen konfiguriert werden. Für einige Fälle existieren verschiedene Pakete einer Anwendung, die beim Übersetzen unterschiedlich konfiguriert wurden. Für Ghostscript gibt es ein ghostscript-Paket und ein ghostscript-nox11-Paket, die sich durch die Xorg Unterstützung unterscheiden. Das Erstellen von verschiedenen Paketen wird aber schnell unhandlich, wenn eine Anwendung mehr als ein oder zwei Optionen zum Zeitpunkt des Übersetzens besitzt. Die Lizenzbestimmungen mancher Software verbietet ein Verbreiten in binärer Form. Diese Software muss als Quelltext, der durch den Benutzer kompiliert werden muss, ausgeliefert werden. Einige Leute trauen binären Distributionen nicht, oder sie ziehen es vor den Quelltext zu lesen, um diesen nach möglichen Problemen zu durchsuchen. Wenn Sie eigene Anpassungen besitzen, benötigen Sie den Quelltext, um diese anzuwenden. Wenn Sie über aktualisierte Ports informiert sein wollen, lesen Sie die Mailinglisten &a.ports; und &a.ports-bugs;. Bevor Sie eine Anwendung installieren, informieren Sie sich auf der Seite http://vuxml.FreeBSD.org/ über mögliche Sicherheitsprobleme mit der Anwendung, oder installieren Sie ports-mgmt/portaudit. Installierte Anwendungen können mit portaudit -F -a auf bekannte Sicherheitsprobleme untersucht werden. Der Rest dieses Kapitels beschreibt, wie man Software Dritter mit Paketen und Ports unter &os; installiert und verwaltet. Suchen einer Anwendung Die Anzahl der nach &os; portierten Anwendungen steigt ständig. Es gibt einige Wege, um nach Anwendungen zu suchen: Die &os;-Webseite stellt unter http://www.FreeBSD.org/ports/ eine aktuelle und durchsuchbare Liste aller Anwendungen zur Verfügung. Die Ports können nach dem Namen den Anwendung, oder über die Software-Kategorie durchsucht werden. FreshPorts Dan Langille verwaltet FreshPorts, das eine umfassende Suchfunktion bietet und Änderungen an den Anwendungen in der Ports-Sammlung verfolgt. Registrierte Benutzer können eine Merkliste erstellen, um automatisch eine E-Mail zu erhalten, sobald ein Port von dieser Liste aktualisiert wurde. Freecode Wenn Sie den Namen einer Anwendung nicht kennen, versuchen Sie eine Webseite wie Freecode.com, um eine passende Anwendung zu finden. Schauen Sie dann auf der &os;-Webseite nach, ob die Anwendung schon portiert wurde. Verwenden Sie whereis Datei um herauszufinden, in welcher Kategorie ein Port ist, wobei Datei der Name des Programms ist, das installiert werden soll: &prompt.root; whereis lsof lsof: /usr/ports/sysutils/lsof Alternativ kann der &man.echo.1;-Befehl verwendet werden: &prompt.root; echo /usr/ports/*/*lsof* /usr/ports/sysutils/lsof Beachten Sie aber, dass dieser Befehl auch alle Dateien im Verzeichnis /usr/ports/distfiles findet, auf die der angegebene Suchbegriff passt. Ein weiterer Weg nach Software zu suchen besteht darin, die eingebaute Suchfunktion der Ports-Sammlung zu benutzen. Wechseln Sie dazu in das Verzeichnis /usr/ports, und rufen Sie make search name=Anwendungsname auf, wobei Anwendungsname der Name der Software ist. Um zum Beispiel nach lsof zu suchen: &prompt.root; cd /usr/ports &prompt.root; make search name=lsof Port: lsof-4.56.4 Path: /usr/ports/sysutils/lsof Info: Lists information about open files (similar to fstat(1)) Maint: obrien@FreeBSD.org Index: sysutils B-deps: R-deps: Die Path:-Zeile zeigt an, wo der Port zu finden ist. Um weniger Informationen zu erhalten, benutzen Sie die Funktion quicksearch: &prompt.root; cd /usr/ports &prompt.root; make quicksearch name=lsof Port: lsof-4.87.a,7 Path: /usr/ports/sysutils/lsof Info: Lists information about open files (similar to fstat(1)) Erweiterte Suchen führen Sie mit make search key=Text oder make quicksearch key=Text aus. Damit werden Portnamen, Kommentare, Beschreibungen und Abhängigkeiten nach Text durchsucht. Dies kann sehr nützlich sein, wenn der Name des Programms nicht bekannt ist. Bei der Verwendung von search und quicksearch wird Groß- und Kleinschreibung bei der Suche ignoriert. Die Suche nach LSOF wird dieselben Ergebnisse wie die Suche nach lsof liefern. Verwendung von Binärpaketen ChernLeeBeigesteuert von Es gibt viele unterschiedliche Werkzeuge um Pakete in &os; zu verwalten: Auf einem laufenden System kann sysinstall benutzt werden, um Pakete zu installieren, zu löschen und verfügbare und installierte anzuzeigen. Weitere Informationen finden Sie unter . Die Paketverwaltungswerkzeuge der Kommandozeile sind die Themen von diesem Kapitel. Installieren eines Pakets Pakete installieren pkg_add Benutzen Sie &man.pkg.add.1;, um ein &os;-Paket von einer lokalen Datei oder über das Netzwerk installieren. Download vor Installation eines Pakets &prompt.root; ftp -a ftp2.FreeBSD.org Connected to ftp2.FreeBSD.org. 220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready. 331 Guest login ok, send your email address as password. 230- 230- This machine is in Vienna, VA, USA, hosted by Verio. 230- Questions? E-mail freebsd@vienna.verio.net. 230- 230- 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd /pub/FreeBSD/ports/packages/sysutils/ 250 CWD command successful. ftp> get lsof-4.56.4.tgz local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz 200 PORT command successful. 150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes). 100% |**************************************************| 92375 00:00 ETA 226 Transfer complete. 92375 bytes received in 5.60 seconds (16.11 KB/s) ftp> exit &prompt.root; pkg_add lsof-4.56.4.tgz Wenn Sie die Pakete nicht lokal vorliegen haben, zum Beispiel auf den &os;-CD-ROMs, verwenden Sie den Schalter von &man.pkg.add.1;. Dies bestimmt automatisch das nötige Objektformat und die richtige Version des Pakets, lädt dieses dann von einem FTP-Server und installiert es, ohne das weitere Benutzereingriffe nötig sind. pkg_add &prompt.root; pkg_add -r lsof Wenn Sie einen anderen &os; FTP-Mirror verwenden möchten, geben Sie den Mirror in der Umgebungsvariablen PACKAGESITE an. &man.pkg.add.1; benutzt &man.fetch.3;, um Dateien herunterzuladen. Umgebungsvariablen wie FTP_PASSIVE_MODE, FTP_PROXY und FTP_PASSWORD werden dabei berücksichtigt. Wenn Sie durch eine Firewall geschützt werden, müssen Sie vielleicht eine oder mehrere dieser Umgebungsvariablen setzen oder einen FTP oder HTTP Proxy verwenden. Eine Liste der unterstützten Umgebungsvariablen finden Sie in &man.fetch.3;. Beachten Sie, dass im obigen Beispiel lsof anstelle von lsof-4.56.4 verwendet wird. Wenn Sie &man.pkg.add.1; zum Herunterladen eines Pakets verwenden, darf die Versionsnummer des Pakets nicht angegeben werden. Unter &os.current; oder &os.stable; holt &man.pkg.add.1; die neueste Version einer Anwendung. Unter einer -RELEASE Version holt es die Version der Anwendung, die im Release enthalten ist. Sie können dieses Verhalten ändern, indem Sie die Umgebungsvariable PACKAGESITE überschreiben. Auf einem &os; 8.1-RELEASE System, versucht &man.pkg.add.1; in der Voreinstellung die Pakete von ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.1-release/Latest/ zu laden. Um &man.pkg.add.1; zu zwingen, nur &os; 8-STABLE-Pakete herunterzuladen, setzen Sie PACKAGESITE auf ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/. Pakete werden im .tgz- und .tbz-Format ausgeliefert. Sie sind unter ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/, oder auf der &os;-DVD-Distribution. Die Struktur des Paketbaums entspricht der Verzeichnisstruktur unter /usr/ports. Jede Kategorie besitzt ein eigenes Verzeichnis und alle Pakete befinden sich im Verzeichnis All. Verwalten von Paketen Pakete verwalten &man.pkg.info.1; kann dazu benutzt werden, alle installierten Pakete und deren Beschreibung anzuzeigen. pkg_info &prompt.root; pkg_info colordiff-1.0.13 A tool to colorize diff output docbook-1.2 Meta-port for the different versions of the DocBook DTD ... &man.pkg.version.1; vergleicht die Version installierter Pakete mit der Version aus der Ports-Sammlung. pkg_version &prompt.root; pkg_version colordiff = docbook = ... Die Symbole in der zweiten Spalte zeigen das Alter des Pakets im Vergleich zu der lokalen Version aus der Ports-Sammlung an. Symbol Bedeutung = Die Version des installierten Paketes stimmt mit der Version aus der lokalen Ports-Sammlung überein. < Die installierte Version ist älter als die der verfügbaren Version aus der lokalen Ports-Sammlung. > Die installierte Version ist neuer als die aus der Ports-Sammlung, was vermutlich bedeutet, dass die lokale Ports-Sammlung veraltet ist. ? Das installierte Paket konnte im Ports-Index nicht gefunden werden. Dies kann passieren, wenn ein installierter Port aus der Ports-Sammlung entfernt wurde oder einen neuen Namen erhalten hat. * In der Ports-Sammlung befinden sich mehrere Versionen der Anwendung. ! Das installierte Paket ist zwar im Index enthalten, aus irgendeinem Grund war pkg_version aber dennoch nicht in der Lage, die Versionsnummer des installierten Pakets mit der Versionsnummer des entsprechenden Eintrags im Index zu vergleichen. Entfernen eines Pakets pkg_delete Pakete entfernen Um ein zuvor installiertes Paket zu entfernen, benutzen Sie &man.pkg.delete.1;. &prompt.root; pkg_delete xchat-1.7.1 Beachten Sie, dass &man.pkg.delete.1; die vollständige Bezeichnung des Pakets benötigt. Die Eingabe von xchat anstelle von xchat-1.7.1 wäre im obigen Beispiel daher nicht ausreichend. Benutzen Sie &man.pkg.version.1;, um die Versionsnummer des Pakets herausfinden, oder verwenden Sie Wildcards: &prompt.root; pkg_delete xchat\* In diesem Beispiel werden alle Pakete gelöscht, deren Name mit xchat beginnt. Verschiedenes Alle Paketinformationen, einschließlich der Beschreibungen, werden im Verzeichnis /var/db/pkg abgelegt. Benutzen von <application>pkgng</application> zur Verwaltung von Binärpaketen pkgng ist ein verbesserter Ersatz für die traditionellen Paketverwaltungswerkzeuge von &os;. Es bietet viele Funktionen, um den Umgang mit Binärpaketen schneller und einfacher zu gestalten. pkgng wurde erstmalig im August 2012 veröffentlicht. pkgng ist kein Ersatz für die Portverwaltungswerkzeuge wie ports-mgmt/portmaster oder ports-mgmt/portupgrade. Während ports-mgmt/portmaster und ports-mgmt/portupgrade Drittanbieter-Software sowohl aus Binärpaketen als auch aus den Ports installieren kann, so installiert pkgng ausschließlich Binärpakete. Erste Schritte mit <application>pkgng</application> &os; 9.1 und nachfolgende Versionen enthalten ein "Bootstrap"-Programm für pkgng. Das Bootstrap-Programm lädt und installiert pkgng. Um das Bootstrap Programm zu starten, geben Sie folgendes ein: &prompt.root; /usr/sbin/pkg Für ältere Versionen von &os; muss pkgng zunächst aus der Ports-Sammlung oder als Paket installiert werden. Um pkgng aus den Ports zu installieren, geben Sie folgendes ein: &prompt.root; cd /usr/ports/ports-mgmt/pkg &prompt.root; make &prompt.root; make install clean Um das Paket zu installieren, geben Sie folgendes ein: &prompt.root; pkg_add -r pkg Bestehende &os; Installationen benötigen eine Konvertierung der pkg_install-Paketdatenbank in das neue Format. Um die Paketdatenbank zu konvertieren, geben Sie folgendes ein: &prompt.root; pkg2ng Auf neu installieren Systemen, auf denen noch keine Software von Drittanbietern installiert wurde, kann dieser Schritt entfallen. Die Konvertierung ist unwiderruflich. Sobald die Paketdatenbank in das Format von pkgng umgewandelt wurde, sollten die traditionellen pkg_install Werkzeuge nicht mehr benutzt werden. Bei der Konvertierung der Paketdatenbank können Fehler ausgegeben werden, wenn die Inhalte auf die neue Version umgewandelt werden. Im Allgemeinen können diese Fehler ignoriert werden. Wenn pkg2ng fertig ist, wird eine Liste von Drittanbieter-Software ausgegeben, die nicht erfolgreich konvertiert werden konnte. Diese Anwendungen müssen manuell neu installiert werden. Um sicherzustellen, dass die &os; Ports-Sammlung neue Pakete mit pkgng und nicht mit pkg_install registriert, muss in &os; 10.X und früheren Versionen folgende Zeile in /etc/make.conf hinzugefügt werden: WITH_PKGNG= yes Konfiguration der <application>pkgng</application> Umgebung Das pkgng Paketverwaltungssystem benutzt für die meisten Operationen ein Paket-Repository. Der Speicherort des Paket-Repositories wird in /usr/local/etc/pkg.conf oder der Umgebungsvariablen PACKAGESITE definiert. Weitere Konfigurationsoptionen für pkgng sind in &man.pkg.conf.5; beschrieben. Grundlegende Bedienung von <application>pkgng</application> Informationen zur Bedienung von pkgng ist in der Manualpage &man.pkg.8; verfügbar. Alternativ kann pkg ohne zusätzliche Argumente aufgerufen werden. Jedes Argument von pkgng ist in seiner spezifischen Manualpage dokumentiert. Um beispielsweise die Manualpage von pkg install zu lesen, geben Sie einen der folgenden Befehle ein: &prompt.root; pkg help install &prompt.root; man pkg-install Mit <application>pkgng</application> Informationen über installierte Pakete anzeigen Informationen über bereits installierte Pakete können mit pkg info angezeigt werden. Dabei wird die Version und die Beschreibung aller Pakete ausgegeben. Informationen zu einem bestimmten Paket können wie folgt angezeigt werden: &prompt.root; pkg info paketname Um zu ermitteln welche Version von pkgng installiert ist, geben Sie folgendes ein: &prompt.root; pkg info pkg pkg-1.0.2 New generation package manager Installation und Deinstallation von Paketen mit <application>pkgng</application> In der Regel werden Benutzer von &os; Binärpakete wie folgt installieren: &prompt.root; pkg install paketname pkg install benutzt das in erwähnte Repository. Im Gegensatz dazu benutzt &man.pkg-add.8; kein Repository, oder eine definierte PACKAGESITE, so dass Abhängigkeiten nicht ordnungsgemäß aufgelöst und fehlende Abhängigkeiten nicht von entfernten Systemen heruntergeladen werden. Dieser Abschnitt beschreibt die Bedienung von pkg install. Informationen zur Bedienung von pkg add finden Sie in &man.pkg-add.8;. Zusätzliche Binärpakete können mit pkg intall installiert werden. Um beispielsweise curl zu installieren: &prompt.root; pkg install curl Updating repository catalogue Repository catalogue is up-to-date, no need to fetch fresh copy The following packages will be installed: Installing ca_root_nss: 3.13.5 Installing curl: 7.24.0 The installation will require 4 MB more space 1 MB to be downloaded Proceed with installing packages [y/N]: y ca_root_nss-3.13.5.txz 100% 255KB 255.1KB/s 255.1KB/s 00:00 curl-7.24.0.txz 100% 1108KB 1.1MB/s 1.1MB/s 00:00 Checking integrity... done Installing ca_root_nss-3.13.5... done Installing curl-7.24.0... done Das neue Paket und jedes weitere Paket, das als Abhängigkeit installiert wurde, ist in der Liste der installierten Pakete zu sehen: &prompt.root; pkg info ca_root_nss-3.13.5 The root certificate bundle from the Mozilla Project curl-7.24.0 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers pkg-1.0.2 New generation package manager Wird ein Paket nicht mehr benötigt, kann es mit pkg delete entfernt werden. Wenn beispielsweise curl nicht mehr benötigt wird: &prompt.root; pkg delete curl The following packages will be deleted: curl-7.24.0_1 The deletion will free 3 MB Proceed with deleting packages [y/N]: y Deleting curl-7.24.0_1... done Installierte Pakete mit <application>pkgng</application> aktualisieren Pakete die nicht mehr aktuell sind, können mit pkg version gefunden werden. &man.pkg-version.8; nutzt zur Identifikation der Paketversionen die lokale Ports-Sammlung, falls diese installiert ist. Ansonsten wird dazu das entfernte Repository benutzt. Pakete können mit pkgng auf neue Versionen aktualisiert werden. Wenn eine neue Version von curl veröffentlicht wurde, kann das lokale Paket auf die neue Version aktualisiert werden: &prompt.root; pkg upgrade Updating repository catalogue repo.txz 100% 297KB 296KB/s 296KB/s 00:00 The following packages will be upgraded: Upgrading curl: 7.24.0 -> 7.24.0_1 1 MB to be downloaded Proceed with upgrading packages [y/N]: y curl-7.24.0_1.txz 100% 1108KB 1.1MB/s 1.1MB/s 00:00 Checking integrity... done Upgrading curl from 7.24.0 to 7.24.0_1... done Installierte Pakete mit <application>pkgng</application> auditieren Gelegentlich werden Sicherheitslücken in einer Software innerhalb der Ports-Sammlung entdeckt. pkgng besitzt ein eingebautes Auditing, was mit dem Paket ports-mgmt/portaudit vergleichbar ist. Um die auf dem System installierte Software zu prüfen, geben Sie folgenden Befehl ein: &prompt.root; pkg audit -F Fortgeschrittene Arbeiten mit <application>pkgng</application> Automatisches Entfernen von nicht mehr benötigten Abhängigkeiten mit <application>pkgng</application> Das Entfernen eines Pakets kann möglicherweise unnötige Abhängigkeiten hinterlassen, wie im obigen Beispiel ca_root_nss. Solche Pakete sind zwar noch installiert, aber keine weiteren Pakete hängen mehr von ihnen ab. Unnötige Pakete, die als Abhängigkeit von anderen Paketen installiert wurden, können automatisch erfasst und entfernt werden: &prompt.root; pkg autoremove Packages to be removed: ca_root_nss-3.15.5 The autoremoval will free 723 kB Proceed with autoremoval of packages [y/N]: y Deinstalling ca_root_nss-3.13.5... done Sicherung der <application>pkgng</application> Datenbank Im Gegensatz zum alten Paketverwaltungssystem beinhaltet pkgng einen eigenen Mechanismus zur Sicherung der Paketdatenbank. Um den Inhalt der Datenbank manuell zu sichern, geben Sie folgendes ein: &prompt.root; pkg backup -d pkgng.db Ersetzen Sie den Dateinamen pkgng.db durch einen geeigneten Dateinamen. Zusätzlich verfügt pkgng über ein &man.periodic.8;-Skript, das automatisch eine tägliche Sicherung der Paketdatenbank erstellt, wenn in &man.periodic.conf.5; daily_backup_pkgng_enable auf YES gesetzt ist. Um pkg_install daran zu hindern, ebenfalls eine Sicherung der Paketdatenbank zu erstellen, muss in &man.periodic.conf.5; daily_backup_pkgdb_enable auf NO gesetzt werden. Um den Inhalt einer früheren Paketdatenbank wiederherzustellen, geben Sie folgendes ein: &prompt.root; pkg backup -r /path/to/pkgng.db Alte Pakete mit <application>pkgng</application> entfernen Standardmäßig speichert pkgng Pakete in einem Cache-Verzeichnis, welches in &man.pkg.conf.5; in der Variablen PKG_CACHEDIR definiert wird. Beim Upgrade der Pakete mit pkg upgrade, werden die alten Versionen der Pakete nicht automatisch entfernt. Um veraltete Pakete zu entfernen, geben Sie folgendes ein: &prompt.root; pkg clean Manipulation der <application>pkgng</application> Paket Metadaten Bei Software aus der &os; Ports-Sammlung kann es vorkommen, dass die Hauptversionsnummer geändert wird. Im Gegensatz zu pkg_install hat pkgng ein eingebautes Kommando, um die Quelle eines Pakets zu aktualisieren. Wenn zum Beispiel lang/php5 ursprünglich die Version 5.3 hatte, nun aber in lang/php53 umbenannt wurde, um die Version 5.4 zu integrieren, dann hätte pkg_install zusätzliche Software, wie beispielsweise ports-mgmt/portmaster benötigt, um die Quelle des Pakets in der Paketdatenbank zu aktualisieren. Bei ports-mgmt/portmaster und ports-mgmt/portupgrade unterscheidet sich die Ausgabe bei der Auflistung von neuen und alten Versionen. Für pkgng lautet die Syntax: &prompt.root; pkg set -o category/oldport:category/newport Um die Quelle des Pakets für das obige Beispiel zu ändern, geben Sie folgendes ein: &prompt.root; pkg set -o lang/php5:lang/php53 Ein weiteres Beispiel: Um lang/ruby18 auf lang/ruby19 zu aktualisieren, geben Sie folgendes ein: &prompt.root; pkg set -o lang/ruby18:lang/ruby19 In diesem letzten Beispiel wird die Quelle der Bibliotheken von libglut von graphics/libglut auf graphics/freeglut geändert: &prompt.root; pkg set -o graphics/libglut:graphics/freeglut Bei dem Wechsel einer Paketquelle ist es in den meisten Fällen notwendig, die Pakete neu zu installieren, welche von dem Paket abhängig sind, welches seine Paketquelle geändert hat. Um eine Neuinstallation von abhängigen Paketen zu erzwingen, führen Sie folgenden Befehl aus: &prompt.root; pkg install -Rf graphics/freeglut Benutzen der Ports-Sammlung Dieser Abschnitt stellt die grundlegenden Anweisungen vor, um Anwendungen aus der Ports-Sammlung zu installieren oder zu löschen. &man.ports.7; enthält eine Auflistung aller verfügbaren make-Targets und Umgebungsvariablen. Ende 2012 hat das &os; Ports-Projekt eine Migration des Versionskontrollsystems von CVS auf Subversion durchgeführt. Die bevorzugte Methode zum Herunterladen der Ports-Sammlung ist Portsnap. Benutzer, die lokale Anpassungen der Ports vornehmen müssen, werden es wahrscheinlich bevorzugen, Subversion direkt zu verwenden. Der CVSup-Service wurde am 28. Februar 2013 eingestellt. Installation der Ports-Sammlung Die Ports-Sammlung ist eine Reihe von Makefiles, Patches und Beschreibungen, die unter /usr/ports gespeichert sind. Diese Dateien werden für den Bau und die Installation von Anwendungen unter &os; verwendet. Die folgenden Anweisungen zeigen verschiedene Methoden zur Installation der Ports-Sammlung, falls diese nicht schon während der Installation von &os; installiert wurden. Installation mit Portsnap Portsnap ist ein schnelles und benutzerfreundliches Werkzeug zur Installation der Ports-Sammlung und die bevorzugte Wahl für die meisten - Benutzer. Eine detaillierte Beschreibung zu - Portsnap finden Sie in Portsnap: ein Werkzeug - zur Aktualisierung der Ports-Sammlung. + Benutzer. Laden Sie einen komprimierten Snapshot der Ports-Sammlung in /var/db/portsnap. &prompt.root; portsnap fetch Wenn Sie Portsnap das erste Mal verwenden, müssen Sie den Snapshot nach /usr/ports extrahieren: &prompt.root; portsnap extract Nach dem ersten Einsatz von Portsnap, kann /usr/ports wie folgt aktualisiert werden: &prompt.root; portsnap fetch &prompt.root; portsnap update Installation mit Subversion Wird mehr Kontrolle über die Ports-Sammlung benötigt (beispielsweise für der Pflege lokaler Änderungen), kann Subversion benutzt werden, um die Ports-Sammlung zu laden. Lesen Sie the Subversion Primer für eine detaillierte Beschreibung von Subversion. Subversion muss installiert sein, bevor damit die Ports-Sammlung geladen werden kann. Ist eine lokale Kopie der Ports-Sammlung bereits vorhanden, installieren Sie Subversion wie folgt: &prompt.root; cd /usr/ports/devel/subversion &prompt.root; make install clean Ist keine lokale Kopie der Ports-Sammlung vorhanden, kann Subversion als Paket installiert werden: &prompt.root; pkg_add -r subversion Wird pkgng für die Verwaltung von Paketen benutzt, kann Subversion darüber installiert werden: &prompt.root; pkg install subversion Laden Sie eine Kopie der Ports-Sammlung. Verwenden Sie anstatt svn0.us-east.FreeBSD.org einen Subversion Mirror in Ihrer Nähe. Committer sollten zuvor den Subversion Primer lesen, um sicherzustellen, dass das richtige Protokoll gewählt wird. &prompt.root; svn checkout https://svn0.us-east.FreeBSD.org/ports/head /usr/ports Nach dem erstmaligen checkout mit Subversion kann /usr/ports wie folgt aktualisiert werden: &prompt.root; svn update /usr/ports Installieren mit <application>sysinstall</application> Nicht zuletzt ist es auch möglich, die Ports-Sammlung über sysinstall zu installieren. Beachten Sie dabei aber, dass bei dieser Methode nicht die aktuellste Version der Ports-Sammlung, sondern die Version, die zum Zeitpunkt der Veröffentlichung der installierten &os;-Version aktuell war, installiert wird. Haben Sie Zugriff auf das Internet, so sollten Sie daher stets eine der weiter oben beschriebenen Methoden verwenden, um die Ports-Sammlung zu installieren. Führen Sie als root sysinstall aus: &prompt.root; sysinstall Wählen Sie den Punkt Configure aus und drücken Sie Enter. Wählen Sie dann Distributions aus und drücken Sie Enter. In diesem Menü wählen Sie ports aus und drücken die Leertaste. Danach wählen Sie Exit aus und drücken Enter. Legen Sie nun ein geeignetes Installationsmedium, wie CD-ROM oder FTP, fest. Wählen Sie nun Exit aus und drücken Enter. Verlassen Sie sysinstall mit X. Migration von <application>CVSup</application>/<application>csup</application> zu <application>portsnap</application> Seit dem 28. Februar 2013 wird die Ports-Sammlung nicht mehr nach CVS exportiert. Somit werden über CVSup und csup keine Updates für die Ports-Sammlung mehr zu Verfügung gestellt. Migration zu portsnap Für die Migration werden in /usr ca. 1 GB freier Speicher und in /var ca. 150 MB freier Speicher benötigt. Deaktivieren Sie alle automatischen Updates der Ports-Sammlung, wie beispielsweise &man.cron.8; Jobs, die CVSup oder csup aufrufen. Verschieben Sie die bestehende Ports-Sammlung in ein temporäres Verzeichnis: &prompt.root; mv /usr/ports /usr/ports.old Laden Sie eine aktuelle Kopie Ports-Sammlung mit Portsnap herunter und extrahieren Sie diese nach /usr/ports: &prompt.root; portsnap fetch extract Verschieben Sie Distfiles und vorhandene Pakete in die neue Ports-Sammlung: &prompt.root; mv /usr/ports.old/distfiles /usr/ports &prompt.root; mv /usr/ports.old/packages /usr/ports Löschen Sie die alte Ports-Sammlung: &prompt.root; rm -rf /usr/ports.old Falls zuvor CVSup verwendet wurde, kann es nun deinstalliert werden: &prompt.root; pkg_delete -r -v cvsup-without-gui-\* Benutzer von pkgng können das folgende Kommando benutzen: &prompt.root; pkg delete cvsup-without-gui Eine detaillierte Beschreibung von Portsnap und wie die Ports-Sammlung mit Portsnap aktualisiert wird, finden Sie in Portsnap: Ein Werkzeug zur Aktualisierung der Ports-Sammlung. Ports installieren Ports installieren Ein Port-Gerüst ist ein Satz von Dateien, die &os; sagen, wie ein Programm zu kompilieren und zu installieren ist. Ein jeder Port beinhaltet: Makefile: Das Makefile enthält Anweisungen, die spezifizieren, wie eine Anwendung kompiliert wird und wohin sie installiert werden sollte. distinfo: Diese Datei enthält Informationen, welche Dateien heruntergeladen werden müssen sowie deren Prüfsummen (&man.sha256.1;), um sicherzustellen, dass Dateien während des Herunterladens nicht beschädigt wurden. files: Dieses Verzeichnis enthält Patches, welche das Übersetzen und Installieren der Anwendung unter &os; ermöglichen. Zudem können noch weitere Dateien, die für die Übersetzung des Ports verwendet werden, enthalten sein. pkg-descr: Diese Datei enthält eine ausführlichere Beschreibung der Anwendung. pkg-plist: Das ist eine Liste aller Dateien, die durch diesen Port installiert werden. Außerdem sind hier Informationen enthalten, die zum Entfernen des Ports benötigt werden. Einige Ports besitzen noch andere Dateien, wie pkg-message, die vom Portsystem benutzt werden, um spezielle Situationen zu handhaben. Wenn Sie mehr über diese Dateien oder das Port-System erfahren sollen, lesen Sie das &os; Porter's Handbook. Ein Port enthält nicht den eigentlichen Quellcode, der auch als Distfile bekannt ist. Der Autor der Software kann bestimmen, in welcher Weise die Software verteilt wird. Die beiden Methoden zur Installation eines &os;-Ports werden nachfolgend beschrieben. Zum Installieren von Ports müssen Sie als Benutzer root angemeldet sein. Stellen Sie sicher, dass die Ports-Sammlung aktuell ist, bevor Sie einen Port kompilieren. Informieren Sie sich vorher zusätzlich unter http://vuxml.FreeBSD.org/ über mögliche Sicherheitsprobleme des zu installierenden Ports. Wenn ports-mgmt/portaudit installiert ist, führen Sie portaudit -F aus, um die aktuelle Sicherheitsdatenbank zu aktualisieren. Die täglich laufende Sicherheitsprüfung des Systems aktualisiert ebenfalls die Datenbank und prüft installierte Anwendungen auf vorhandene Sicherheitsprobleme. Für weitere Informationen lesen Sie die Manualpage &man.portaudit.1; und &man.periodic.8;. Die Ports-Sammlung geht davon, dass eine funktionierende Internetverbindung besteht. Ansonsten muss eine Kopie des zu installierenden Distfiles manuell nach /usr/ports/distfiles kopiert werden. Dazu wechseln Sie als erstes in das Verzeichnis des Ports, den Sie installieren wollen: &prompt.root; cd /usr/ports/sysutils/lsof Um den Port zu übersetzen (auch Bauen genannt), geben Sie am Prompt make ein. Die Ausgabe sollte der in diesem Beispiel ähnlich sein: &prompt.root; make >> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/. >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/. ===> Extracting for lsof-4.57 ... [Ausgabe des Auspackens weggelassen] ... >> Checksum OK for lsof_4.57D.freebsd.tar.gz. ===> Patching for lsof-4.57 ===> Applying FreeBSD patches for lsof-4.57 ===> Configuring for lsof-4.57 ... [configure-Ausgabe weggelassen] ... ===> Building for lsof-4.57 ... [Ausgabe der Übersetzung weggelassen] ... &prompt.root; Ist die Übersetzungsprozedur beendet, landen Sie wiederum in der Kommandozeile und können das Programm im nächsten Schritt mit make install installieren: &prompt.root; make install ===> Installing for lsof-4.57 ... [Ausgabe der Installation weggelassen] ... ===> Generating temporary packing list ===> Compressing manual pages for lsof-4.57 ===> Registering installation for lsof-4.57 ===> SECURITY NOTE: This port has installed the following binaries which execute with increased privileges. &prompt.root; Nachdem die Installation abgeschlossen ist, können Sie die gerade installierte Anwendung starten. Da lsof eine Anwendung ist, die mit erhöhten Rechten läuft, wird eine Sicherheitswarnung angezeigt. Sie sollten alle Warnungen während des Baus und der Installation eines Ports beachten. Es ist eine gute Idee, das Unterverzeichnis work nach erfolgter Installation wieder zu löschen. Einerseits gewinnen Sie dadurch Speicherplatz, andererseits könnte es sonst zu Problemen bei der Aktualisierung des Ports auf eine neuere Version kommen. &prompt.root; make clean ===> Cleaning for lsof-4.57 &prompt.root; Sie können zwei Schritte sparen, wenn Sie gleich make install clean anstelle von make, make install und make clean eingeben. Wird ein Port immer nur mit make install installiert, kann es möglicherweise zu mehreren Wartezeiten zwischen Benutzerinteraktionen kommen, da dem Benutzer standardmäßig Optionen angezeigt werden. Um dies bei einer hohen Anzahl an Abhängigkeiten zu vermeiden, starten Sie zuerst make config-recursive, um die Konfiguration der Optionen an einem Stück zu erledigen. Führen Sie anschließend make install [clean] aus. Bei der Verwendung von config-recursive wird eine Liste von Ports, die konfiguriert werden, vom &man.make.1;-Target all-depends-list erstellt. Es wird oft empfohlen, make config-recursive so lange auszuführen, bis alle Optionen der abhängigen Ports definiert sind und keine Optionen und &man.dialog.1;-Masken mehr erscheinen. Damit soll sichergestellt werden, dass alle Optionen wie beabsichtigt konfiguriert wurden. Um die Suche nach Kommandos zu beschleunigen, speichern einige Shells eine Liste der verfügbaren Kommandos in den durch die Umgebungsvariable PATH gegebenen Verzeichnissen. Wenn Sie die tcsh benutzen, müssen Sie eventuell rehash eintippen, um die neu installierten Kommandos benutzen zu können, ohne den vollständigen Pfad anzugeben. Unter Shells wie der sh benutzen Sie stattdessen das Kommando hash -r. Weitere Informationen finden Sie in der Dokumentation der jeweiligen Shell. Einige von Dritten angebotenen DVD-Produkte wie das &os; Toolkit von der &os; Mall enthalten auch Distfiles. Diese lassen sich über die Ports-Sammlung installieren. Dazu hängen Sie die DVD unter /cdrom in den Verzeichnisbaum ein. Wenn Sie einen anderen Mountpunkt verwenden, setzen Sie die make-Variable CD_MOUNTPTS, damit die auf der DVD enthaltenen Distfiles automatisch verwendet werden. Die Lizenzen einiger Ports verbieten die Einbeziehung auf der DVD. Das kann verschiedene Gründe haben. Beispielsweise ist eine Registrierung vor dem Herunterladen erforderlich, oder die Weiterverteilung ist verboten. Wenn Sie einen Port installieren wollen, der nicht auf der DVD enthalten ist, müssen Sie mit dem Internet verbunden sein. Die Ports-Sammlung benutzt zum Herunterladen von Dateien &man.fetch.3;, das Umgebungsvariablen wie FTP_PASSIVE_MODE, FTP_PROXY und FTP_PASSWORD berücksichtigt. Wenn Sie durch eine Firewall geschützt werden, müssen Sie vielleicht eine oder mehrere dieser Umgebungsvariablen setzen, oder einen FTP oder HTTP Proxy verwenden. Eine Liste der unterstützten Umgebungsvariablen finden Sie in &man.fetch.3;. Benutzer ohne eine ständige Internet-Verbindung können make fetch im Verzeichnis /usr/ports ausführen, um die benötigten Dateien herunterzuladen. Es ist auch möglich, make fetch nur in einem Teil des Baums, wie /usr/ports/net, aufzurufen. Die Dateien von allen abhängigen Ports werden mit diesem Kommando allerdings nicht heruntergeladen. Wenn Sie diese Dateien ebenfalls herunterladen wollen, benutzen Sie make fetch-recursive. Sie können alle Ports einer Kategorie oder alle Ports bauen, indem Sie make im übergeordneten Verzeichnis ausführen. Dies ist jedoch eine gefährliche Methode, da einige Ports nicht nebeneinander existieren können. Weiterhin gibt es Fälle, in denen zwei Ports unterschiedliche Inhalte in derselben Datei speichern wollen. In einigen seltenen Fällen ist es erforderlich, die benötigten Dateien von einem anderen Ort als den im Port definierten MASTER_SITES herunterzuladen. Sie können die Option MASTER_SITES mit dem folgenden Kommando überschreiben: &prompt.root; cd /usr/ports/directory &prompt.root; make MASTER_SITE_OVERRIDE= \ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch Im Beispiel wurde MASTER_SITES mit dem Wert ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ überschrieben. Einige Ports bieten Optionen, mit denen zusätzliche Funktionen oder Sicherheitsoptionen eingestellt werden können. Zusätzliche Optionen können beispielsweise für www/firefox, security/gpgme und mail/sylpheed-claws angegeben werden. Wenn ein Port über zusätzliche Optionen verfügt, wird ein Menü beim Bau des Ports ausgegeben. Vorgabe-Verzeichnisse ändern Die Variablen WRKDIRPREFIX und PREFIX überschreiben das voreingestellte Bau- und Zielverzeichnis. Zum Beispiel: &prompt.root; make WRKDIRPREFIX=/usr/home/example/ports install Dieses Kommando baut den Port unter /usr/home/example/ports und installiert ihn unter /usr/local. Die Variable PREFIX legt das Installations-Verzeichnis fest: &prompt.root; make PREFIX=/usr/home/example/local install In diesem Beispiel wird der Port unter /usr/ports gebaut und nach /usr/home/example/local installiert. Sie können beide Variablen auch zusammen benutzen: &prompt.root; make WRKDIRPREFIX=../ports PREFIX=../local install Alternativ können diese Variablen auch als Umgebungsvariablen gesetzt werden. In der Manualpage Ihrer Shell finden Sie Anweisungen, wie Umgebungsvariablen gesetzt werden. Ports rekonfigurieren Einige Ports enthalten ein ncurses-basiertes Menü, über dessen Optionen der Bau dieser Ports beeinflusst werden kann. Es gibt diverse Möglichkeiten, dieses Menü nach dem Bau eines Ports erneut aufzurufen, um beispielsweise Optionen zu entfernen, hinzuzufügen oder anzupassen. Sie können beispielsweise in das Verzeichnis des Ports wechseln und dort den Befehl make config eingeben. Eine andere Möglichkeit ist make showconfig. Eine weitere Alternative bietet make rmconfig, der alle ursprünglich gewählten Optionen zurücksetzt und es Ihnen dadurch ermöglicht, die Konfiguration erneut zu beginnen. Die eben erwähnten Optionen (und viele andere) werden ausführlich in der Manualpage &man.ports.7; beschrieben. Entfernen installierter Ports Ports entfernen Installierte Ports werden mit &man.pkg.delete.1; wieder deinstalliert: &prompt.root; pkg_delete lsof-4.57 Ports aktualisieren Ports aktualisieren Als erstes sollten sie sich alle installierten Ports anzeigen lassen, von denen eine aktuellere Version in der Ports-Sammlung existiert. Dazu verwenden Sie den Befehl &man.pkg.version.1;: &prompt.root; pkg_version -v Lesen Sie <filename>/usr/ports/UPDATING</filename> Nachdem Sie die Ports-Sammlung auf den neusten Stand gebracht haben, lesen Sie bitte zuerst die Datei /usr/ports/UPDATING, bevor Sie einen Port aktualisieren. In dieser Datei werden Probleme und zusätzlich durchzuführende Schritte bei der Aktualisierung einzelner Ports beschrieben. Dazu gehören solche Dinge wie geänderte Dateiformate, verschobene Konfigurationsdateien, aber auch Inkompatibilitäten zu einer Vorgängerversion. Sollte UPDATING etwas hier Gesagtem widersprechen, so gilt das in UPDATING Gesagte. Ports mit Portupgrade aktualisieren portupgrade portupgrade wurde entwickelt, um die Aktualisierung von Ports zu vereinfachen. Sie können portupgrade über den Port ports-mgmt/portupgrade wie jeden anderen Port mit make install clean installieren: &prompt.root; cd /usr/ports/ports-mgmt/portupgrade/ &prompt.root; make install clean Durchsuchen Sie regelmäßig die Liste der installierten Ports mit pkgdb -F und beheben Sie alle gefundenen Probleme. Es ist eine gute Idee, dies vor jedem Update auszuführen. Benutzen Sie portupgrade -a, um automatisch alle veralteten Ports auf dem System zu aktualisieren. Verwenden Sie den Schalter , wenn Sie individuell entscheiden wollen, ob ein Port aktualisiert werden soll: &prompt.root; portupgrade -ai Um nur eine spezifische Anwendung zu aktualisieren, verwenden Sie portupgrade Paketname. Geben Sie den Schalter an, wenn portupgrade zuvor alle Ports aktualisieren soll, die von dem gegebenen Paket abhängen. &prompt.root; portupgrade -R firefox Um Pakete anstelle von Ports zu installieren, verweden Sie den Schalter . Mit dieser Option durchsucht portupgrade die in der Umgebungsvariablen PKG_PATH aufgeführten Verzeichnisse nach Paketen. Sind lokal keine Pakete vorhanden, versucht portupgrade die Pakete über das Netz herunterzuladen. Gibt es die Pakete weder lokal noch auf entfernten Rechnern, werden die Ports verwendet. Um dies zu verhindern, benutzen Sie die Option . &prompt.root; portupgrade -PP gnome2 Wenn Sie nur die Quelldateien des Ports (oder die Pakete mit ) herunterladen möchten, ohne die Anwendung zu bauen oder zu installieren, geben Sie die Option an. Weitere Möglichkeiten lesen Sie bitte in der Hilfeseite &man.portupgrade.1; nach. Ports mit <application>portmaster</application> aktualisieren portmaster portmaster ist ein weiteres Werkzeug zum Aktualisieren von Ports. portmaster nutzt nur Werkzeuge, die bereits im Basissystem vorhanden sind, ohne dabei von weiteren Ports abhängig zu sein. Es verwendet Informationen in /var/db/pkg/, um festzustellen, welche Ports aktualisiert werden sollen. Sie können den Port wie folgt installieren: &prompt.root; cd /usr/ports/ports-mgmt/portmaster &prompt.root; make install clean Portmaster teilt Ports in vier Kategorien ein: Root ports: no dependencies and is not depended on by other ports Trunk ports: no dependencies, but other ports depend upon it Branch ports: have dependencies but are depended upon by other ports Leaf ports: have dependencies but are not depended upon by other ports Um eine Liste der installierten Ports anzuzeigen und nach neueren Versionen zu suchen, verwenden Sie : &prompt.root; portmaster -L ===>>> Root ports (No dependencies, not depended on) ===>>> ispell-3.2.06_18 ===>>> screen-4.0.3 ===>>> New version available: screen-4.0.3_1 ===>>> tcpflow-0.21_1 ===>>> 7 root ports ... ===>>> Branch ports (Have dependencies, are depended on) ===>>> apache-2.2.3 ===>>> New version available: apache-2.2.8 ... ===>>> Leaf ports (Have dependencies, not depended on) ===>>> automake-1.9.6_2 ===>>> bash-3.1.17 ===>>> New version available: bash-3.2.33 ... ===>>> 32 leaf ports ===>>> 137 total installed ports ===>>> 83 have new versions available Um alle installierten Ports zu aktualisieren, verwenden Sie folgenden Befehl: &prompt.root; portmaster -a In der Voreinstellung erzeugt portmaster eine Sicherheitskopie, bevor ein installierter Port gelöscht wird. Ist die Installation der neuen Version erfolgreich, wird dieses Backup wieder gelöscht. Wollen Sie das Backup lieber manuell löschen, verwenden Sie die Option beim Aufruf von portmaster. Durch die Verwendung von wird portmaster im interaktiven Modus gestartet und fragt bei jedem zu aktualisierenden Port nach, wie weiter vorgegangen werden soll. Treten während der Aktualisierung Fehler auf, können Sie die Option verwenden, um alle Ports zu aktualisieren beziehungsweise neu zu bauen: &prompt.root; portmaster -af portmaster ist auch in der Lage, neue Ports zu installieren, wobei zuvor alle abhängigen Ports aktualisiert werden: &prompt.root; portmaster shells/bash Weiterführende Informationen finden Sie in der Manualpage &man.portmaster.8;. Platzbedarf von Ports Ports Plattenplatz Die Nutzung der Ports-Sammlung wird im Laufe der Zeit viel Plattenplatz verschlingen. Nach dem Bau und der Installation eines Ports, wird make clean die temporären Arbeitsverzeichnisse work aufräumen. Um die gesamte Ports-Sammlung aufzuräumen, verwenden Sie folgenden Befehl: &prompt.root; portsclean -C Im Laufe der Zeit werden sich zahlreiche veraltete Distfiles in distfiles ansammeln. Mit dem folgenden Befehl werden alle Distfiles gelöscht, die vom keinem Port mehr benötigt werden: &prompt.root; portsclean -D Um alle Distfiles zu löschen, die von keinem derzeit installierten Port referenziert werden: &prompt.root; portsclean -DD Das Werkzeug portsclean wird automatisch bei der Installation von portupgrade mit installiert. port-mgmt/pkg_cutleaves automatisiert die Deinstallation von installierten Ports, die nicht weiter benötigt werden. Nach der Installation Nach der Installation einer neuen Anwendung wollen Sie wahrscheinlich die mitgelieferte Dokumentation lesen, notwendige Konfigurationsdateien anpassen und sicherstellen, dass die Dienste der Anwendung automatisch beim Booten gestartet werden. Die einzelnen Schritte sind natürlich von Anwendung zu Anwendung verschieden. Wenn Sie sich allerdings nach der Installation einer Anwendung die Frage Was nun? stellen, helfen die folgenden Hinweise vielleicht weiter. Finden Sie mit &man.pkg.info.1; heraus, welche Dateien die Anwendung wo installiert hat. Wenn Sie beispielsweise gerade die Version 1.0.0 von FooPackage installiert haben, zeigt Ihnen das folgende Kommando alle installierten Dateien des Pakets: &prompt.root; pkg_info -L foopackage-1.0.0 | less Achten Sie besonders auf die Manualpages, die sich in man/ befinden und auf Konfigurationsdateien, die in etc/ abgelegt werden. Manche Pakete enthalten in doc/ zusätzliche Dokumentation. Um festzustellen welche Version der Anwendung installiert ist: &prompt.root; pkg_info | grep -i foopackage Das Kommando zeigt alle installierten Pakete, deren Paketname foopackage enthält. Ersetzen Sie foopackage durch den Namen der Anwendung, die Sie suchen. Nachdem Sie die Manualpages der Anwendung gefunden haben, lesen Sie diese mit &man.man.1;. Überprüfen Sie die Beispiele für Konfigurationsdateien und die zusätzliche Dokumentation an, wenn es welche gibt. Wenn es für die Anwendung eine Webseite gibt, suchen Sie dort nach zusätzlicher Dokumentation wie FAQs (häufig gestellte Fragen). Wenn Sie die Adresse der Webseite nicht kennen, versuchen Sie das folgende Kommando: &prompt.root; pkg_info foopackage-1.0.0 Die Ausgabe enthält oft eine Zeile, die mit WWW: beginnt und die URL der Webseite enthält. Ports die während des Systemstarts gestartet werden sollen, installieren meist ein Startskript in /usr/local/etc/rc.d. Überprüfen Sie dieses Skript, und wenn nötig, passen Sie es an oder benennen Sie es um. Weitere Informationen finden Sie in . Kaputte Ports Stolpern Sie einmal über einen Port, der nicht funktioniert: Stellen Sie fest, ob die Datenbank mit den Problemberichten bereits einen Lösungsvorschlag enthält. Ist dies der Fall, können Sie die vorgeschlagene Lösung testen. Bitten Sie den Betreuer des Ports um Hilfe. Geben Sie dazu make maintainer ein oder lesen Sie das Makefile im Verzeichnis des Ports, um an die E-Mail-Adresse zu kommen. Vergessen Sie nicht den Namen und die Version des Ports (schicken Sie die Zeile mit $FreeBSD: aus dem Makefile) und die Ausgabe bis zur Fehlermeldung mitzuschicken. Einige Ports werden nicht von einer Einzelperson, sondern von einer Mailingliste betreut. Viele (aber nicht alle) dieser Adressen haben die Form freebsd-NameDerListe@FreeBSD.org. Denken Sie daran, wenn Sie Ihre Fragen formulieren. Dies gilt insbesondere für Ports, die als Betreuer den Eintrag ports@FreeBSD.org aufweisen. Derartige Ports haben überhaupt keinen Betreuer. Korrekturen und Unterstützung kommen daher nur von Personen, die diese Mailingliste abonniert haben. Gerade in diesem Bereich werden jederzeit zusätzliche freiwillige Helfer benötigt! Erhalten Sie auf Ihre Anfrage keine Antwort, benutzen Sie &man.send-pr.1;, um einen Problembericht zu erstellen. Bevor Sie einen solchen Bericht erstellen, lesen Sie den Artikel Writing &os; Problem Reports. Reparieren Sie ihn! Das &os; Porter's Handbook enthält eine detaillierte Beschreibung des Portsystems. Damit sind Sie in der Lage, einen gelegentlich kaputten Port zu reparieren oder einen eigenen Port zu erstellen. Benutzen Sie alternativ &man.pkg.add.1;, um das Paket zu installieren. Index: head/de_DE.ISO8859-1/htdocs/ports/installing.xml =================================================================== --- head/de_DE.ISO8859-1/htdocs/ports/installing.xml (revision 48014) +++ head/de_DE.ISO8859-1/htdocs/ports/installing.xml (revision 48015) @@ -1,35 +1,38 @@ - + %ports.ent; %statistics.ent; ]> &title; $FreeBSD$ &searchform;
-

Wenn Sie FreeBSD von einer CD-ROM oder von einem FTP-Server - installieren, können Sie die Ports-Sammlung direkt über - sysinstall - installieren.

+

Das &os; Installationsprogramm (&os; 9.X und neuere verwenden + bsdinstall, + &os; 8.X und älter verwenden + sysinstall) + erlaubt die Installation der Ports-Sammlung während der + Installation des Betriebssystems.

-

Alternativ können Sie die Ports-Sammlung auch als - komprimiertes Archiv (derzeitige Größe etwa - 36 MB) herunterladen.

+

Wird die Ports-Sammlung anfangs nicht installiert ist, kann sie + jederzeit nachträglich über + portsnap + oder Subversion + hinzugefügt werden.