FreeBSD Ports: Patches einreichen
Einen patch für einen FreeBSD Port zu erstellen ist nicht schwer, ich finde die Doku dazu aber bezüglich best practices eher mager. Daher hier eine Liste, wie der Workflow aussehen kann.
den Patch erstellen
- Voraussetzung ist natürlich eine Kopie des Ports-Trees
portsnap fetch extract
- zunächst Sicherheitshalber eine Kopie der Ports anlegen
cp -r print/foo2zjs print/foo2zjs.orig
- Äufräumen, Archive holen, auspacken und bestehende Patches Anwenden
make clean extract patch
. Das Ergbnis findet sich imwork
Ordner. - Nun die eigenen Änderungen vornehmen. Darauf achten, dass zu jeder modifizierten Datei eine unmodifizierte Kopie mit der Endung
.orig
existiert. Wurde eine Datei schon von einem bestehenden Patch modifiziert, exisitiert schon eine.orig
Datei. Diese dann so lassen. Am Ende ensteht also ein *unified1. patch, der bestehende und neue Änderungen enthält. Ein bisschen Aufwendig ist das ganze, wenn man einen fertigen Patch aus dem Netz hat, der auf den original Source Code passt und nicht auf die FreeBSD patches. Dann muss man per Hand die Patches anwenden (aka copy-and-paste). - Nun mit
make patch
automatisch die neuen Patch-Dateien anlegen lassen (zu finden imfiles
Ordner. make clean
aufräumen lassen und mitmake build
schauen ob der Port baut. Vergisst man dasmake clean
so werden die Patches doppelt angewendet, was natürlich zu Fehlern führt.- Mit
make package
lässt sich ein fertiges Paket bauen, dass viapkg
oderpkg_add
installiert werden kann. Wurden durch die Patches neue Dateien angelegt, die mit ins Paket sollen, müssen diese in derpkg-plist
vermerkt werden.
den Patch einreichen
Der Übersicht halber sollte man ein make clean
laufen lassen und das ggf. erstellte Paket im .tar.xz
Format aus dem Ordner entfernen.
Um den Patch in die Ports Sammlung zu bekommen, muss man ein Patch erstellen. Dazu neu dazugekommene Dateien via svn add
zur Versionsverwaltung hinzufügen. Für veränderte, bereits bestehende Dateien ist das natürlich nicht notwendig. Nun kann via svn diff
ein Patch ausgegeben werden, der unter http://bugs.freebsd.org eingereicht werden kann. Gibt man dabei den Portnamen im Titel des Bugs an, so wird der zuständige Maintainer per Mail darauf aufmerksam gemacht. Manchmal gibt es keinen Maintainer mehr, dann muss man einfach hoffen, dass sich ein anderer erbarmt, den Patch einzuchecken. Nachfragen auf der FreeBSD-Ports Mailingliste könnte da helfen…