Wenn Sie feststellen, dass ein Port verglichen mit der
neuesten Version des Originalautors nicht mehr auf dem aktuellen
Stand ist, sollten Sie als Erstes sicherstellen, dass Sie die
aktuellste Version des Ports haben. Diese finden Sie im
Verzeichnis ports/ports-current
der FreeBSD
FTP-Spiegelseiten. Wenn Sie allerdings mit mehr als ein paar
Ports arbeiten, werden Sie es wahrscheinlich einfacher finden
CVSup zu benutzen, um Ihre gesamte
Ports-Sammlung aktuell zu halten, wie es im Handbuch
beschrieben wird. Das hat zusätzlich den Vorteil, dass Sie
so auch alle Abhängigkeiten des Ports aktuell
halten.
Der nächste Schritt besteht darin festzustellen, ob
bereits eine Aktualisierung des Ports darauf wartet committet zu
werden. Um das sicherzustellen haben Sie folgende
Möglichkeiten. Es gibt eine durchsuchbare Schnittstelle zur
FreeBSD
Problembericht Datenbank (PR - Problem Report) (auch
bekannt als GNATS
). Wählen Sie dazu
Ports
im Drop-Down-Menü und geben Sie
den Namen des Ports ein.
Allerdings wird manchmal vergessen den Namen des Ports
eindeutig im Feld für die Zusammenfassung anzugeben. In
diesem Fall können Sie das FreeBSD
Ports Monitoring System (auch bekannt als
portsmon
) nutzen. Dieses versucht PRs von
Ports nach Portname zu sortieren. Um PRs nach einem bestimmten
Port zu durchsuchen können Sie die Übersicht
eines Ports verwenden.
Wenn es keine wartenden PRs gibt, ist der nächste
Schritt eine E-Mail an den Maintainer des Ports zu schicken, wie
von make maintainer
gezeigt wird. Diese
Person arbeitet vielleicht schon an einer Aktualisierung, oder
hat einen guten Grund den Port im Moment nicht zu aktualisieren
(z.B. wegen Stabilitätsproblemen der neuen Version). Sie
wollen sicher nicht die Arbeit des Maintainers doppelt machen.
Beachten Sie bitte, dass für Ports ohne Maintainer
ports@FreeBSD.org
eingetragen ist. Das ist
nur die allgemeine FreeBSD ports-Mailingliste, deshalb wird es in
diesem Fall wahrscheinlich nicht helfen eine E-Mail dorthin zu
schicken.
Wenn Sie der Maintainer bittet die Aktualisierung zu erledigen, oder falls es keinen Maintainer gibt, haben Sie Gelegenheit, FreeBSD zu helfen, indem Sie die Aktualisierung selbst bereitstellen. Dazu verwenden Sie diff(1), das bereits im Basissystem enthalten ist.
Um einen brauchbaren diff
für einen
einzelne Datei zu erstellen, kopieren Sie die zu patchende
Datei nach dateiname.orig
und speichern
Ihre Änderungen in die Datei
dateiname
. Danach erzeugen Sie den
Patch:
%
/usr/bin/diff dateiname.orig dateiname > dateiname.diff
Soll mehr als eine Datei gepatcht werden, können Sie
entweder cvs diff
verwenden (siehe dazu Abschnitt 10.1, „Patches mit CVS erstellen“) oder Sie kopieren
den kompletten Port in ein neues Verzeichnis und speichern die
Ausgabe des rekursiven diff(1) auf das neue und alte
Portverzeichniss (wenn Ihr verändertes Portverzeichnis z.B.
superedit
und das Original
superedit.bak
heißt, dann speichern
Sie bitte die Ergebnisse von diff -ruN superedit.bak
superedit
). Sowohl vereinheitlichendes als auch
kontextabhängiges diff (Auflistung der Unterschiede zweier
Dateien) sind akzeptabel, aber im Allgemeinen bevorzugen
Port-Committer vereinheitlichende diff
s.
Bitte beachten Sie die Verwendung der
-N
-Option. Dies ist der gebräuchliche
Weg diff
dazu zu bewegen korrekt damit
umzugehen, neue Dateien anzulegen und alte zu löschen.
Bevor Sie das diff einsenden überprüfen Sie bitte die
Ausgabe, um sicherzugehen, dass die Änderungen sinnvoll
sind. Stellen Sie insbesondere sicher, dass Sie das
Arbeitsverzeichnis mit make clean
aufgerät haben).
Um gängige Operationen mit Korrekturdateien zu
vereinfachen, können Sie
/usr/ports/Tools/scripts/patchtool.py
benutzen. Aber lesen Sie bitte vorher
/usr/ports/Tools/scripts/README.patchtool
.
Falls der Port keinen Maintainer hat und Sie ihn selbst aktiv benutzen, ziehen Sie bitte in Erwägung sich als Maintainer zu melden. FreeBSD hat mehr als 4000 Ports ohne Maintainer und in diesem Bereich werden immer zusätzliche Freiwillige benötigt (Für eine ausführliche Beschreibung der Verantwortlichkeiten eines Maintainers lesen Sie bitte im Developer's Handbook nach).
Der beste Weg uns das diff zu schicken ist mittels
send-pr(1) (Kategorie Ports). Wenn Sie der Maintainer des
Ports sind, fügen Sie bitte [maintainer
update]
an den Anfang Ihrer Zusammenfassung und setzen
Sie die „Klasse“ des PR auf
maintainer-update
. Ansonsten sollte die
„Klasse“ des PR change-request
sein. Bitte erwähnen Sie alle hinzugefügten oder
gelöschten Dateien in der Nachricht, da diese beim Commit
ausdrücklich an cvs(1) übergeben werden
müssen. Wenn das diff größer ist als 20 Kilobyte
komprimieren und uuencoden Sie es bitte. Ansonsten können
Sie es in den PR einfügen wie es ist.
Bevor Sie den PR mit send-pr(1) abschicken, sollten Sie den Abschnitt Den Problembericht schreiben im Artikel über Problemberichte lesen. Dieser enthält sehr viel mehr Informationen darüber, wie man nützliche Problemberichte verfasst.
Wenn Sie Ihre Aktualisierung aufgrund von
Sicherheitsbedenken oder eines schwerwiegenden Fehlers
bereitstellen wollen, informieren Sie bitte das Ports Management Team <portmgr@FreeBSD.org>
,
um einen sofortigen Rebuild und eine Neuverteilung des Pakets
Ihres Ports durchzuführen. Sonst werden ahnungslose
Nutzer von pkg_add(1) über mehrere Wochen die alte
Version durch pkg_add -r
installieren.
Noch einmal: Bitte verwenden Sie diff(1) und nicht shar(1), um Aktualisierungen existierender Ports zu senden. Sie erleichtern es damit den Ports-Committern, Ihre Änderungen nachzuvollziehen.
Nun, da Sie all das geschafft haben, können Sie in Kapitel 14, Auf dem Laufenden bleiben nachlesen, wie Sie den Port aktuell halten.
Wenn möglich, sollten Sie stets eine cvs(1)-Differenz einreichen. Diese sind leichter zu bearbeiten als Differenzen zwischen „neuen und alten“ Verzeichnissen. Außerdem könenn Sie so einfacher feststellen, welche Änderungen Sie vorgenommen haben oder Ihren Patch modifizieren, falls dies durch Änderungen in einem anderen Bereich der Ports-Sammlung notwendig wird oder Sie vom Committer um eine Korrektur Ihres Patches gebeten werden.
%
cd ~/my_wrkdir
![]()
%
cvs -d R_CVSROOT co pdnsd
![]()
![]()
%
cd ~/my_wrkdir/pdnsd
Das Verzeichnis, in dem Sie den Port bauen wollen. Dieses
Arbeitsverzeichnis kann sich auch außerhalb von
| |
R_CVSROOT steht für einen öffentlichen CVS-Server. Eine Liste aller verfügbaren Server finden Sie im FreeBSD Handbuch. | |
Ersetzen Sie „pdnsd“ durch den Modulnamen des
Ports. Dieser entspricht in der Regel dem Namen des Ports.
Allerdings gibt es einige Ausnahmen von dieser Regel, insbesondere
bei sprachspezifischen Ports (beispielsweise lautet der Modulname
für den Port german/selfhtml
de-selfhtml). Um den Namen des Moduls herauszufinden, können
Sie entweder die cvsweb-Schnittstelle
verwenden oder den kompletten Pfad des Ports angeben (in unserem
Beispiel wäre der komplette Pfad also |
Danach modifizieren Sie den Port in gewohnter Weise. Falls Sie
Dateien hinzufügen oder entfernen, sollten Sie dies mit
cvs
protokollieren:
%
cvs add new_file
%
cvs remove deleted_file
Überprüfen Sie die Funktion Ihres Ports anhand der
Checklisten in Abschnitt 3.4, „Den Port testen“ und
Abschnitt 3.5, „Ihren Port mit portlint
überprüfen“.
%
cvs status
%
cvs update
Dadurch wird versucht, die Differenz zwischen Ihrer geänderten Version und dem aktuellen Stand im CVS zu kombinieren. Achten Sie dabei unbedingt auf die Ausgabe dieses Befehls. Vor jeder Datei wird ein Buchstabe angezeigt, der Ihnen mitteilt, was mit dieser Datei passiert ist. Eine vollständige Liste dieser Präfixe finden Sie in Tabelle 10.1, „Von cvs update verwendete Präfixe“. |
U | Die Datei wurde aktualisiert. Es traten dabei keine Probleme auf. |
P | Die Datei wurde ohne Probleme aktualisiert (dieses Präfix wird nur verwendet, wenn Sie mit einem entfernten Repository arbeiten). |
M | Die Datei wurde modifiziert. Es traten keine Konflikte auf. |
C | Die Datei wurde modifiziert, allerdings kam es dabei zu Konflikten zwischen Ihrer geänderten Version und der aktuellen Version im CVS. |
Wird das Präfix C
nach einem
cvs update
angezeigt, bedeutet dies, dass im CVS
etwas geändert wurde und cvs(1) daher nicht in der Lage war,
Ihre Änderungen und die Änderungen im CVS zu kombinieren.
Es ist immer sinnvoll, sich die Änderungen anzusehen, da
cvs
keine Informationen darüber hat, wie ein
Port aufgebaut sein soll. Es kann (und wird wahrscheinlich) daher
vorkommen, dass sich manchmal Änderungen ergeben, die keinen
Sinn machen.
Im letzten Schritt erzeugen Sie einen „unified diff(1)“ gegen die derzeit im CVS vorhandenen Dateien:
%
cvs diff -uN > ../`basename ${PWD}`.diff
Verwenden Sie unbedingt die Option -N
, um
sicherzustellen, dass von hinzugefügte oder gelöschte
Dateien im Patch erfasst sind. Der Patch enthät auch
von Ihnen gelöschte Dateien (allerdings ohne Inhalt). Dies
ist wichtig, da nur so der Committer wissen kann, welche Dateien
er entfernen muss.
Zuletzt reichen Sie Ihren Patch ein, indem Sie der Anleitung in Kapitel 10, Einen existierenden Port aktualisieren folgen.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.