/usr/home

just some random thoughts

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

  1. Voraussetzung ist natürlich eine Kopie des Ports-Trees portsnap fetch extract
  2. zunächst Sicherheitshalber eine Kopie der Ports anlegen cp -r print/foo2zjs print/foo2zjs.orig
  3. Äufräumen, Archive holen, auspacken und bestehende Patches Anwenden make clean extract patch. Das Ergbnis findet sich im work Ordner.
  4. 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 .origDatei. 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).
  5. Nun mit make patch automatisch die neuen Patch-Dateien anlegen lassen (zu finden im files Ordner.
  6. make clean aufräumen lassen und mit make build schauen ob der Port baut. Vergisst man das make clean so werden die Patches doppelt angewendet, was natürlich zu Fehlern führt.
  7. Mit make package lässt sich ein fertiges Paket bauen, dass via pkg oder pkg_add installiert werden kann. Wurden durch die Patches neue Dateien angelegt, die mit ins Paket sollen, müssen diese in der pkg-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…