BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

patch-Dateien bearbeiten

Mit Hilfe von diff(1) können Änderungen zwischen zwei Versionen einer Textdatei angezeigt werden:

# diff -u datei.orig datei
--- datei.orig 2008-07-05 10:26:27.000000000 +0200
+++ datei 2008-07-05 10:26:18.000000000 +0200
@@ -1 +1 @@
-Inhalt original
+Inhalt neu

Leitet man die Ausgabe von diff in eine Datei um, kann die Änderung danach mit Hilfe von patch(1) zum Beispiel auf eine identische Datei auf einem anderen Rechner angewendet werden:

# diff -u datei.orig datei > datei.patch
# patch < datei.patch
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- datei.orig 2008-07-05 10:26:27.000000000 +0200
|+++ datei 2008-07-05 10:26:18.000000000 +0200
--------------------------
Patching file datei using Plan A...
Hunk #1 succeeded at 1.
done

In den FreeBSD Ports unter misc/patchutils findet man patchutils, welches mehrere Programme enthält, mit denen man patch-Dateien bearbeiten kann.

# cd /usr/ports/misc/patchutils && make install clean

Besitzt man zum Beispiel zwei Versionen eines Patches, so können mit Hilfe von interdiff(1) die Änderungen zwischen den beiden Versionen angezeigt werden. Die Ausgabe von interdiff kann ebenfalls wieder in eine Datei umgeleitet werden, welche danach wieder mit patch(1) angewendet werden kann:

# interdiff pkg_updating_main_c-1.patch pkg_updating_main_c-2.patch > pkg_updating_main_c-diff_1-2.patch

Eine Patch-Datei kann auch die Änderungen von mehreren Datein beinhalten. Möchte man nur Änderungen von bestimmten Dateien aus einem Patch auslesen, kann filterdiff(1) verwendet werden. Mit der -i Option werden nur Änderungen von Dateien angezeigt, welche auf das Filterkriterium passen. Mit der -x Option werden alle Änderungen von Datein angezeigt, welche nicht auf das Filterkriterium passen. Im folgenden Beispiel werden nur die Änderungen an Header-Dateien aus dem Patch angezeigt:

# filterdiff -i '*.h' pkg_updating.patch

Modifizert man einen Patch von Hand, kann es sein, dass Zeilennummern und der Offset im Patch nicht mehr stimmen. Nun kann dazu rediff(1) aufgerufen werden, welches diese an die neuen Änderungen anpasst:

# rediff <Originale Datei> <Modifizierter Patch>

Alternativ dazu kann der Patch direkt mit editdiff(1) bearbeitet werden. Dazu wird ein Editor geöffnet, in welchem der Patch bearbeitet werden kann. Speichert man die Änderungen und schliesst den Editor, werden die Änderungen am Patch direkt umgesetzt:

# editdiff <Patch>

Hat man zwei Patches auf die gleiche Datei erstellt, welche nacheinander angewendet werden sollen, können diese mit combinediff(1) zu einem Patch verbunden werden

# combinediff <Patch1> <Patch2>

Mit lsdiff(1) können alle Dateien angezeigt werden, welche durch den Patch modifiziert werden:

#  lsdiff pkg_updating.patch
src/usr.sbin/pkg_install/lib/lib.h
src/usr.sbin/pkg_install/updating/Makefile
src/usr.sbin/pkg_install/updating/main.c
src/usr.sbin/pkg_install/updating/pathnames.h
src/usr.sbin/pkg_install/version/version.h

Möchte man überprüfen, ob eine gewisse Datei mit dem Patch modifiziert wird, kann grepdiff(1) verwendet werden:

# grepdiff main pkg_updating.patch
src/usr.sbin/pkg_install/updating/main.c

Befindet sich ein Patch auf einer HTML Seite, kann der Quellcode der Seite heruntergeladen werden und danach der Patch aus dem HTML-Code mit Hilfe von dehtmldiff(1) extrahiert werden:

# dehtmldiff <HTML-Datei>
 Permalink

DNS Konfiguration auf Fehler überprüfen

Mit Hilfe von doc kann die DNS Konfiguration einer Domain auf Fehler überprüft werden. doc findet man im FreeBSD Portbaum unter dns/doc:

# cd /usr/ports/dns/doc && make install clean

Nun kann der Domainname der Domain, welche überprüft werden soll, an doc übergeben werden:

# doc chruetertee.ch
Doc-2.2.3: doc chruetertee.ch
Doc-2.2.3: Starting test of chruetertee.ch. parent is ch.
Doc-2.2.3: Test date - Sa 28 Jun 2008 13:32:14 CEST
Summary:
No errors or warnings issued for chruetertee.ch.
Done testing chruetertee.ch. Sa 28 Jun 2008 13:32:30 CEST

Mit der -v Option können zusätzliche Informationen zu den durchgeführten Tests angezeigt werden:

# doc -v chruetertee.ch

Im Verzeichnis, in dem doc ausgeführt wurde, wird eine Logdatei mit allen Testausgaben erstellt:

# cat log.chruetertee.ch.

Eine Übersicht, welche Tests durchgeführt wurden, findet man in der Datei /usr/local/lib/doc/INFO. Mehr Informationen zu doc findet man in der Manpage doc(8).

 Permalink

MASTER_SITES aus bsd.sites.mk nach Antwortzeiten sortieren

In der Datei /usr/ports/Mk/bsd.sites.mk, sind die Server hinterlegt, von welchen über die Ports der Quellcode von größeren Softwareprojekten heruntergeladen werden kann. Ebenfalls ist die Reihenfolge, in welcher die Server angefragt werden, in dieser Datei hinterlegt. Diese Reihenfolge kann nun angepasst werden, so dass das Herunterladen zuerst von Servern versucht wird, welche bessere Antwortzeiten haben. Dazu kann das Skript fastest_sites verwendet werden, welches man im FreeBSD Portbaum unter ports-mgmt/fastest_sites findet:

# cd /usr/ports/ports-mgmt/fastest_sites && make install clean

Führt man das Skript aus, werden die Antwortzeiten der verschiedenen Server getestet. Die Ausgabe kann in eine Datei geschrieben werden:

# fastest_sites > /usr/local/etc/ports_sites.conf
=> Checking servers for MASTER_SITE_GENTOO (50 servers)
=> Checking servers for MASTER_SITE_TCLTK (6 servers)
=> Checking servers for MASTER_SITE_GET_E (6 servers)
=> Checking servers for MASTER_SITE_EASYSW (5 servers)
=> Checking servers for MASTER_SITE_PERL_CPAN (19 servers)
=> Checking servers for MASTER_SITE_PACKETSTORM (5 servers)
=> Checking servers for MASTER_SITE_GNUPG (14 servers)
[...]

Die erstellte Datei kann nun in /etc/make.conf eingebunden werden. Dazu kann einfach folgende Zeile an die Datei angehängt werden:

.include "/usr/local/etc/ports_sites.conf"
 Permalink

Terminalfenster unterteilen

Mit Hilfe von dvtm kann man ein Terminalfenster in mehrere Terminals aufteilen. Im FreeBSD Portbaum ist dvtm unter sysutils/dvtm vorhanden:

# cd /usr/ports/sysutils/dvtm && make install clean

Um dvtm anzupassen, kann die config.h Datei entsprechend geändert werden. Diese muss dann beim Kompilieren des Ports über die Variable DVTM_CONF angegeben werden:

# cd /usr/ports/sysutils/dvtm && make DVTM_CONF=/<Pfad zu eigener Konfig>/config.h install clean

Startet man nun dvtm, wird ein neues Terminal geöffnet:

# dvtm

Zum Ausführen von dvtm-Befehlen muss zuerst eine bestimmte Tastenkombination gedrückt werden. Standardmässig ist das Ctrl+g (Strg+g auf der deutschen Tastatur). Möchte man zum Beispiel das vorhandene Terminalfenster in zwei Terminals unterteilen, drückt man Ctrl+g und danach c.

Hat man nun mehrere Terminals geöffnet, kann die Anordnung der Terminals mit Ctrl+g Leertaste geändert werden. Alternativ kann auch direkt mit Ctrl+g b, Ctrl+g g oder Ctrl+g t die gewünschte Anordnung gewählt werden.

Nun kann mit Ctrl+g j oder Ctrl+g k das aktive Terminal gewechselt werden. Verwendet man dvtm auf einer X Oberfläche, kann mit der Maus in das gewünschte Fenster geklickt werden. Möchte man unter X Text mit der Maus markieren, um diesen in die Zwischenablage zu kopieren, oder Text aus der Zwischenablage in ein Terminal kopieren, muss dazu die Shift-Taste gedrückt werden.

Einzelne Terminals können mit Ctrl+g x geschlossen werden. dvtm beendet man mit Ctrl+g q.

Folgendes Bild zeigt dvtm mit fünf offenen Terminals, in denen mcabber, newsbeuter, mutt und screen laufen.

dvtm

Mehr Informationen zu dvtm und alle möglichen Tastenkombinationen findet man in der Manpage dvtm(1).

Comments (4)  Permalink

foreach-Schleife in der tcsh

Mit der foreach-Schleife können in der tcsh Operationen auf mehreren Dateien gleichzeitig ausgeführt werden. Startet man eine foreach-Schleife, muss eine Variable deklariert werden und angegeben werden, welche Dateien modifiziert werden sollen. Danach können die Befehle, die auf den Dateien angewendet werden sollen, angegeben werden. Anschliessend wird die Schleife mit end beendet. Im folgenden Beispiel wird allen Dateien der Suffix .orig angehängt:

#  ls
file0 file1 file2 file3
# foreach file (*)
foreach? mv $file $file.orig
foreach? end
# ls
file0.orig file1.orig file2.orig file3.orig

Nun können auf den Dateinamen Substitution Patterns der tcsh verwendet werden. So wird im folgenden Beispiel der Suffix .orig durch .test ersetzt:

# foreach file (*)
foreach? mv $file $file:s/.orig/.test/
foreach? end
# ls
file0.test file1.test file2.test file3.test

Soll der Suffix entfernt werden, kann dies mit $file:r gemacht werden:

# foreach file (*)
foreach? mv $file $file:r
foreach? end
# ls
file0 file1 file2 file3

Nun kann der erste Buchstabe des Dateinamens mit Hilfe von $file:u in einen Grossbuchstaben umgewandelt werden:

# foreach file (*)
foreach? mv $file $file:u
foreach? end
# ls
File0 File1 File2 File3

Umgekehrt kann der erste Buchstaben auch wieder in einen Kleinbuchstaben geändert werden:

# foreach file (*)
foreach? mv $file $file:l
foreach? end
# ls
file0 file1 file2 file3

Mehr Informationen zu der foreach-Schleife und den Substitution Patterns der tcsh findet man in der Manpage tcsh(1).

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
tcsh bei Inaktivität beenden
Vervollständigung in der tcsh
Comments (2)  Permalink

ZFS Dateisystem mit mehreren Snapshots replizieren

ZFS Dateisysteme können einfach von einem Pool in einen anderen repliziert werden. Möchte man nun ein ZFS Dateisystem mit mehreren Snapshots in einen anderen Pool replizieren, müsste man jeden Snapshot einzeln replizieren:

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 2.05G 64.9G 18K /tank
tank/home 2.05G 64.9G 2.05G /usr/home
tank/home@now 19K - 1000M -
tank/home@afterupload 19K - 1.95G -
tank/home@aftermodification 0 - 2.05G -
tank2 116K 66.9G 18K /tank2

Um dies zu vereinfachen, kann zfs-replicate installiert werden. zfs-replicate findet man im FreeBSD Portbaum unter sysutils/zfs-replicate:

# cd /usr/ports/sysutils/zfs-replicate && make install clean

Nun muss nur das ZFS Dateisystem angegeben werden, welches repliziert werden soll, und alle Snapshots werden automatisch mit repliziert. Mit der -v Option wird jeweils angezeigt, welche Schritte notwendig sind, um das Dateisystem zu replizieren:

# zfs-replicate -v tank/home tank2
Sending tank/home@now to tank2.
Sending tank/home@afterupload to tank2.
(incremental to tank/home@now.)
Sending tank/home@aftermodification to tank2.
(incremental to tank/home@afterupload.)

Erstellt man nun einen neuen Snapshot und führt zfs-replicate nochmals aus, wird nur der neue Snapshot übertragen:

# zfs snapshot tank/home@tape
# zfs-replicate -v tank/home tank2
Sending tank/home@tape to tank2.
(incremental to tank/home@aftermodification.)

Mehr Informationen zu zfs-replicate findet man auf folgender Webseite: http://blogs.sun.com/constantin/entry/useful_zfs_snapshot_replicator_script

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
FreeBSD nur auf ZFS installieren
Alle Änderungen eines ZFS-Pools anzeigen
Automatisch ZFS Snapshots erstellen
Comments (1)  Permalink

Text der Standardfehlerausgabe hervorheben

Wird zum Beispiel beim Kompilieren viel Text in einer Konsole ausgegeben, können Ausgaben der Standardfehlerausgabe (stderr) leicht übersehen werden. Mit Hilfe von hilite können diese farblich hervorgehoben werden. hilite findet man im FreeBSD Portsbaum unter sysutils/hilite:

# cd /usr/ports/sysutils/hilite && make install clean

Nun kann mit hilite eine gewünschte Shell gestartet werden. Danach werden alle Ausgaben der Standardfehlerausgabe rot hervorgehoben:

# hilite tcsh
# echo test stdout
test stdout
# echo test stderr > /dev/stderr
test stderr
 Permalink

Informationen über eine Laptop-Batterie auslesen

Auf FreeBSD lassen sich mit Hilfe von acpiconf Informationen über eine Laptop-Batterie auslesen. Zuerst muss die Batterienummer bestimmt werden:

# dmesg | grep -i batt
battery0: <ACPI Control Method Battery> on acpi0

Diese kann danach mit der -i Option an acpiconf übergeben werden. Danach werden alle Informationen zu dieser Batterie angezeigt:

# acpiconf -i 0
Design capacity: 71280 mWh
Last full capacity: 30890 mWh
Technology: secondary (rechargeable)
Design voltage: 10800 mV
Capacity (warn): 1544 mWh
Capacity (low): 200 mWh
Low/warn granularity: 1 mWh
Warn/full granularity: 1 mWh
Model number: IBM-08K8918
Serial number: 549
Type: LION
OEM info: SANYO
State: high
Remaining capacity: 98%
Remaining time: unknown
Present rate: 0 mW
Voltage: 12300 mV

Mehr Informationen zu acpiconf findet man in der Manpage acpiconf(8), acpiconf ist bereits im FreeBSD Basissystem vorhanden.

 Permalink

IP Rechner für die Kommandozeile

Mit ipcalc kann durch eine IP-Adresse und eine Netzmaske die dazugehörigen Netzwerk- und Broadcast-Adresse auf der Kommandozeile berechnet werden. ipcalc findet man im FreeBSD Portsbaum unter net-mgmt/ipcalc:

# cd /usr/ports/net-mgmt/ipcalc && make install clean

Nun kann die IP-Adresse und die Netzmaske an ipcalc übergeben werden. Die berechneten Werte werden danach ausgegeben:

# ipcalc 217.150.245.53 255.255.255.192
Address: 217.150.245.53 11011001.10010110.11110101.00 110101
Netmask: 255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard: 0.0.0.63 00000000.00000000.00000000.00 111111
=>
Network: 217.150.245.0/26 11011001.10010110.11110101.00 000000
HostMin: 217.150.245.1 11011001.10010110.11110101.00 000001
HostMax: 217.150.245.62 11011001.10010110.11110101.00 111110
Broadcast: 217.150.245.63 11011001.10010110.11110101.00 111111
Hosts/Net: 62 Class C

Möchte man ein vorhandenes Netz in kleinere Netze aufsplitten, kann mit der --s Option angegeben werden, wie viele Rechner in den neuen Subnetzen enthalten sein müssen. Folgendes Beispiel splittet ein 192.168.0.0/24 Netz in zwei Subnetze, in welchen einmal 10 und einmal 40 Rechner Platz haben können:

#  ipcalc 192.168.0.0/24 --s 10 40
Address: 192.168.0.0 11000000.10101000.00000000. 00000000
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000. 00000000
HostMin: 192.168.0.1 11000000.10101000.00000000. 00000001
HostMax: 192.168.0.254 11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255 11000000.10101000.00000000. 11111111
Hosts/Net: 254 Class C, Private Internet

1. Requested size: 10 hosts
Netmask: 255.255.255.240 = 28 11111111.11111111.11111111.1111 0000
Network: 192.168.0.64/28 11000000.10101000.00000000.0100 0000
HostMin: 192.168.0.65 11000000.10101000.00000000.0100 0001
HostMax: 192.168.0.78 11000000.10101000.00000000.0100 1110
Broadcast: 192.168.0.79 11000000.10101000.00000000.0100 1111
Hosts/Net: 14 Class C, Private Internet

2. Requested size: 40 hosts
Netmask: 255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Network: 192.168.0.0/26 11000000.10101000.00000000.00 000000
HostMin: 192.168.0.1 11000000.10101000.00000000.00 000001
HostMax: 192.168.0.62 11000000.10101000.00000000.00 111110
Broadcast: 192.168.0.63 11000000.10101000.00000000.00 111111
Hosts/Net: 62 Class C, Private Internet

Needed size: 80 addresses.
Used network: 192.168.0.0/25
Unused:
192.168.0.80/28
192.168.0.96/27
192.168.0.128/25

Mehr Informationen zu ipcalc erhält man mit der --help Option:

# ipcalc --help
 Permalink

FreeBSD Ports mit Hilfe von porttools erstellen oder aktualisieren

Möchte man einen FreeBSD Port erstellen oder aktualisieren, so können verschiedene Aufgaben mit porttools vereinfacht werden. Zuerst müssen die porttools installiert werden. Diese findet man im FreeBSD Portbaum unter ports-mgmt/porttools:

# cd /usr/ports/ports-mgmt/porttools && make install clean

Ruft man die porttools das erste Mal auf, wird die .porttools Konfigurationsdatei angelegt, und die verfügbaren Module der porttools angezeigt:

# port
===> Generating /home/beat/.porttools configuration file
FreeBSD Port Tools 0.77
Usage:  port <command> [<options>]

Available commands:
commit  - commit a port into the FreeBSD Ports CVS Repository
create  - create new port from template using newfile(1)
diff    - generate diff against original port version
fetch   - fetch distfile(s) of new port version
getpr   - get patch/shar from a PR
help    - display this command summary
install - install a port
submit  - submit Problem Report with new port, or port change/update
test    - test port (build, install, package, deinstall)
upgrade - upgrade a port

In der angelegten ~/.porttools Datei können nun Variablen gesetzt werden, welche von den porttools verwendet werden. Für was die Variablen verwendet werden, findet man in der Manpage porttools(5).

# FreeBSD Port Tools configuration file - see porttools(5)
# vim: ft=sh
EMAIL="beat@chruetertee.ch"
FULLNAME="Beat Gätzi"
ORGANIZATION=""
BUILDROOT="/tmp"
ARCHIVE_DIR=""
DIFF_MODE="CVS"
DIFF_VIEWER="more"
PORTLINT_FLAGS="abct

Um einen neuen Port zu erstellen, wechselt man in das Verzeichnis, in dem man den Port erstellen möchte und erstellt den Port mit Hilfe des create-Modules:

# cd /tmp
# port create portsopt

Es wurde nun ein Verzeichnis für den Port angelegt und eine Vorlage vom Makefile, pkg-descr und der pkg-plist erstellt:

# ls portsopt
Makefile   pkg-descr  pkg-plist

Jetzt können im Makefile die Variablen CATEGORIES, COMMENT, PORTVERSION, und MASTER_SITES gesetzt werden. Gegebenenfalls müssen die restlichen Variablen auch noch gesetzt werden, damit der Quellcode des Ports heruntergeladen werden kann:

# cd portsopt
# cat Makefile 

# New ports collection makefile for:    portsopt
# Date created:         2008-05-03
# Whom:                 Beat Gätzi <beat@chruetertee.ch>
#
# $FreeBSD$
#

PORTNAME=       portsopt
PORTVERSION=    1.4
#PORTREVISION=  0
#PORTEPOCH=     0
CATEGORIES=     ports-mgmt
MASTER_SITES=   http://www.chruetertee.ch/files/download/
#MASTER_SITE_SUBDIR=
#PKGNAMEPREFIX=
#PKGNAMESUFFIX=
#DISTNAME=
#EXTRACT_SUFX=
#DISTFILES=
#DIST_SUBDIR=   ${PORTNAME}
#EXTRACT_ONLY=

MAINTAINER=     beat@chruetertee.ch
COMMENT=        Shows WITH(OUT)-knobs of a port makefile

.include <bsd.port.pre.mk>
.include <bsd.port.post.mk>

Nicht benötigte Variablen können aus dem Makefile entfernt werden. Nun kann mit Hilfe des porttools der Quellcode heruntergeladen werden. Die Prüfsummen des Ports werden automatisch erstellt. Diese müssen noch mit den offiziellen Prüfsummen verglichen werden:

# port fetch
=> portsopt-1.4.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://www.chruetertee.ch/files/download/.
portsopt-1.4.tar.gz                           100% of 1126  B 1348 kBps
# cat distinfo 
MD5 (portsopt-1.4.tar.gz) = 9062b0fa280e98750dc29a13c41617e3
SHA256 (portsopt-1.4.tar.gz) = 845d6518ff2369fc6f17b6fa0299cba6e3251c7d2568b34c78e603d1a3d556f7
SIZE (portsopt-1.4.tar.gz) = 1126

Nun müssen die restlichen Variablen und make-Targets erstellt werden, die zum Bauen des Ports benötigt werden. Damit auch alle installierten Dateien beim Deinstallieren des Portes wieder entfernt werden, müssen alle Dateien in der Datei pkg-plist aufgelistet werden. Welche Dateien alles installiert werden, kann zum Beispiel mit ftrace herausgefunden werden. Werden nur wenige Dateien oder Verzeichnisse erstellt, können diese auch im Makefile unter PLIST_FILES und PLIST_DIRS aufgeführt und die Datei pkg-plist kann gelöscht werden. Wie die pkg-plist aufgebaut ist, findet man im Porters Hanbook. In der Datei pkg-descr muss nun noch eine Beschreibung des Programms erstellt und die URL zur offiziellen Seite des Programms eingefügt werden. Ist der Port fertig, kann er mit port test getestet werden. Der Port wird dabei standardmässig nach /tmp installiert:

# port test
===> Validating port with portlint
WARN: Makefile: only one MASTER_SITE configured.  Consider adding additional mirrors.
0 fatal errors and 1 warning found.
===> flags: PREFIX=/tmp/portsopt-1.4 NO_DEPENDS=yes PKG_DBDIR=/tmp/pkg_db.ud9qtv5I 
===> Cleaning workspace before port test
===>  Cleaning for portsopt-1.4
===>  Extracting for portsopt-1.4
=> MD5 Checksum OK for portsopt-1.4.tar.gz.
=> SHA256 Checksum OK for portsopt-1.4.tar.gz.
===>  Patching for portsopt-1.4
===>  Configuring for portsopt-1.4
===>  Installing for portsopt-1.4
===>   Generating temporary packing list
===>  Checking if ports-mgmt/portsopt already installed
install  -o root -g wheel -m 555 /usr/ports/ports-mgmt/portsopt/work/portsopt-1.4/portsopt /tmp/portsopt-1.4/sbin
===>   Registering installation for portsopt-1.4
===>  Building package for portsopt-1.4
Creating package /usr/ports/packages/All/portsopt-1.4.tbz
Registering depends:.
Creating bzip'd tar ball in '/usr/ports/packages/All/portsopt-1.4.tbz'
===> Checking pkg_info
portsopt-1.4        Shows WITH(OUT)-knobs of a port makefile
===> Checking shared library dependencies
===>  Deinstalling for ports-mgmt/portsopt
===>   Deinstalling portsopt-1.4
===> Extra files and directories check
===> Cleaning up after port test
===>  Cleaning for portsopt-1.4
===>  Removing existing /tmp/portsopt-1.4 dir
===> Done.

Treten beim Testen keine Fehler auf, kann der Port mittels einem Problem Report eingesandt werden. Dazu kann einfach port submit im Port-Verzeichnis eingegeben werden:

# port submit

Nun wird ein Editor mit dem Problem Report geöffnet. Die wichtigsten Teile des Problem Reports sind bereits ausgefüllt. Auch ist der neue Port als shar-Archiv bereits angehängt. Speichert man den Problem Report und schliesst den Editor, wird nachgefragt, was man damit machen möchte. Um den Problem Report abzusenden kann s gedrückt werden:

s)end, e)dit or a)bort? s

Den Problem Report findet man nach einiger Zeit im GNATS und wird danach von einem FreeBSD-Commiter in den Portbaum aufgenommen.

Mit den porttools lassen sich nicht nur Ports erstellen, sondern auch bestehende Ports aktualisieren. Dazu sichert man zuerst den aktuellen Port:

# cd /usr/ports/www
# cp -Rp fluxcms fluxcsm.orig

Nun können alle Änderungen am Port durchgeführt werden. Die Änderungen können danach auch wieder mit port test geprüft werden. Möchte man die gemachen Änderungen anschauen, kann dazu port diff verwendet werden. Hat der originale Port den Suffix .orig, kann dies den porttools mit der -d Option übergeben werden:

# ls -d /usr/ports/www/fluxcms*
/usr/ports/www/fluxcms/      /usr/ports/www/fluxcms.orig/
# cd /usr/ports/www/fluxcms
# port diff -d .orig

Sind alle Änderungen abgeschlossen, können diese wieder mit einem Problem Report eingesandt werden. Auch hier wird der Patch automatisch von den porttools erstellt. Dazu muss auch wieder der Suffix des originalen Portverzeichnisses mit -d übergeben werden. Der Problem Report wird standardmässig als "non-critical" und der Dringlichkeit low eingesandt. Das kann, wenn nötig, mit der -s und der -s Option, zum Beispiel bei einem Sicherheitsupdate ,überschrieben werden. Gültige Werte bei -s sind non-critical, serious oder critical, bei -p low, medium oder high.

# port submit -d .orig

Nun müssen im Editor noch in der Zeile Synopsis der Platzhalter [SUMMARIZE CHANGES] durch einen kleine Beschreibung der Änderung ersetzt werden. Bei Description sollte der Platzhalter [DESCRIBE CHANGES] durch eine ausführlichere Beschreibung der Änderungen ersetzt werden. Beim Beenden des Editors muss das Versenden des Problem Reports wieder bestätigt werden.

Mehr Informationen wie man FreeBSD Ports erstellt oder aktualisiert findet man im FreeBSD Porter's Handbook. Mehr Informationen zu den porttools findet man in der Manpage port(1) .

Vielen Dank an Martin für seine hilfreichen Anregungen beim Erstellen dieses Artikels.

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink
Prev Next181-190/325