cp datei datei.orig
diff -u datei.orig datei > datei.patch
Beispiel:
| datei.orig | datei |
Mit dieser Datei soll das Patchen gezeigt werden. Dies koennte auch ein Source-File, Makefile... sein. bla 1 bla 2 bla 3 Das ist der "Desd". Hier muss was geaendert werden. bla 4 bla 5 bla 6 bla 7 |
Mit dieser Datei soll das Patchen gezeigt werden. Dies koennte auch ein Source-File, Makefile... sein. bla 1 bla 2 bla 3 Das ist der "Test". Hier muss was geaendert werden. bla 4 bla 5 bla 6 bla 7 |
| datei.patch mit -u | datei.patch ohne -u |
--- datei.orig Wed Nov 21 17:13:02 2001 +++ datei Wed Nov 21 17:13:58 2001 @@ -5,7 +5,7 @@ bla 1 bla 2 bla 3 -Das ist der "Desd". +Das ist der "Test". Hier muss was geaendert werden. bla 4 bla 5 |
8c8 < Das ist der "Desd". --- > Das ist der "Test". |
Wird diff ohne die Option -u aufgerufen, werden nur die Zeilennummer und die Änderung angegeben. Dies kann vor Allem dann zu Problemen führen, wenn mehrere Patches angewendet werden, da sich die Zeilenzahl dabei ändern kann (z.B. 65 Zeilen einfügen).
Um dies zu verhindern, sollte man diff -u benutzen, sodass die Änderungen im Kontext angezeigt werden. Folgende Einträge sind dann pro Änderung in der Datei:
Eine weitere Möglichkeit:
gendiff [dir] .endung > datei.patch
Hierbei wird diff -u auf alle Files mit .endung im Verzeichnis [dir] angewendet. Die Unterschiede werden dann in datei.patch umgeleitet.
Neue Dateien werden erstellt, indem man diff auf eine leere Datei mit Endung .orig und die neu erstellte Datei anwendet.
Dateien werden gelöscht, indem man diff auf die alte Datei mit Endung .orig und eine leere Datei anwendet.
PatchX: datei.patch
muss am Anfang ins Spec-File eingetragen werden, wobei X die Patches durchnummeriert.
Zum Aufrufen der Patches gibt es mehrere Möglichkeiten:
patch < %{PATCHX}
patch -b -z .orig
-b: erstellt vorher ein Backup
-z .orig: benutzt als Suffix .orig
patch -p1 -b -z .orig < %{PATCHX}
-p1: schneidet 1.Teil des Dateinamen ab
%patchX -p1 -b .orig
rpm --initdb --root <root>
/var/lib/rpm/.../lib.db wird erzeugt.
--root <root>: ändert das Root-System von rpm.
/etc/passwd, /etc/group, /etc/nsswitch.conf vom laufenden System kopieren
/etc/passwd und /etc/group in usr- und grp-Ids umgewandelt. Ist nichts vorhanden, wird alles einfach als root installiert!
/etc/nsswitch.conf legt die Suchreihenfolge fest (i.d.R. erst /etc/passwd, dann Netzwerk).
rpm -i --root <root> --nodeps --noscripts <pkg>
--nodeps: rpm installiert einfach, kontrolliert keine Abhängigkeiten, Benutzer muss sicher stellen, dass am Schluss alles stimmt.
--noscripts: anfangs werden keine Scripte ausgeführt (würden Shell benötigen).
rpm -qp -qf '%{POSTIN}\n' <pkg> > x
-qf '%{POSTIN}\n': Ausgabeformat
-qp : Pfadangabe
./x
rpm -U
rpm -Va