Programm patch

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Manfred89
Beiträge: 34
Registriert: 10.02.2023 11:18:01

Programm patch

Beitrag von Manfred89 » 01.09.2023 09:19:12

Hey Leute,

es gibt ja das Programm "Patch" mit welchem man den Kernel auf eine neue Version bringen kann.

Worin unterscheidet es sich von einem update, was es bei debian z.B. gibt, wenn man dort Programme auf eine neue Version bringt?
  • Wird beim Patch nur der veränderte Quellcode verändert, während bei einem Update, das ganze Programm gelöscht und die neue Version installiert wird?
  • Oder gibt es keinen Unterschied und der Befehl Patch macht nur Sinn bei Tar-Balls, da man ja da kein z.B. "apt-upgrade" durchführen kann?

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Programm patch

Beitrag von Meillo » 01.09.2023 09:30:00

Das ist eine wichtige Frage, da das zwei sehr unterschiedliche Dinge sind.

`patch' ist ein Programm, das nur von Programmierern verwendet wird. In den Anfangszeiten von GNU/Linux war das mal anders, da mussten die User auch solche Programmiertaetigkeiten durchfuehren und Code selber uebersetzen. Heute ist das nicht mehr noetig. Als Anwender verwendet man einfach die Paketverwaltung (apt-get und Co.).

Patch-Dateien sind Aenderungsanweisungen fuer Quellcodedateien, die mit dem Programm patch angewendet werden. Danach muss man die Programme immer neu kompilieren. Da du wohl nur ein normaler Anwender bist, ist das fuer dich nicht relevant.

Du solltest einfach nur die Paketverwaltung verwenden, um Pakete zu installieren und das System als ganzes zu aktualisieren.
Use ed once in a while!

Manfred89
Beiträge: 34
Registriert: 10.02.2023 11:18:01

Re: Programm patch

Beitrag von Manfred89 » 01.09.2023 09:41:56

Danke für die Antwort :)

Gibt es da denn einen Unterschied? Beide aktualisieren die Version und bringen "Neuerungen" rein.

Benutzt man den Befehl Patch einfach nur unter anderen Voraussetzungen, wie du sagtest für Quellcodedateien, oder bewirkt ein Update was anderes als ein Patch?

fischig
Beiträge: 3640
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Programm patch

Beitrag von fischig » 01.09.2023 09:52:48

Meillo hat geschrieben:Patch-Dateien sind Aenderungsanweisungen fuer Quellcodedateien, die mit dem Programm patch angewendet werden. Danach muss man die Programme immer neu kompilieren.
Ich sehe nicht, wie man diese Frage:
Manfred89 hat geschrieben:Wird beim Patch nur der veränderte Quellcode verändert, während bei einem UpdateUpgrade, das ganze Programm gelöscht und die neue Version installiert wird?
noch prägnanter beantworten könnte.

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: Programm patch

Beitrag von mat6937 » 01.09.2023 10:24:16

Manfred89 hat geschrieben: ↑ zum Beitrag ↑
01.09.2023 09:41:56
Gibt es da denn einen Unterschied? Beide aktualisieren die Version und bringen "Neuerungen" rein.
Es gibt auch den Fall, wenn beim Updaten von packages, evtl. auch Konfigurationsdateien (das sind ja auch Textdateien, aber keine source-code-Dateien) gepacht (verändert, optimiert) werden sollen.
Das kann manuell gemacht werden oder mit z. B. den dpsyco*-packages:

Code: Alles auswählen

apt search dpsy

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Programm patch

Beitrag von Meillo » 01.09.2023 16:30:40

Manfred89 hat geschrieben: ↑ zum Beitrag ↑
01.09.2023 09:41:56
Gibt es da denn einen Unterschied? Beide aktualisieren die Version und bringen "Neuerungen" rein.

Benutzt man den Befehl Patch einfach nur unter anderen Voraussetzungen, wie du sagtest für Quellcodedateien, oder bewirkt ein Update was anderes als ein Patch?
Als Basis zum Verstaendnis des Unterschieds musst du zuerst folgende Dinge verstehen:
- was ein Binaerpaket ist
- was das Kompilieren von Code bewirkt
- wie Software in Debian installiert ist und was ein Paketmanager macht

Darauf aufbauend kannst du die beiden Befehle `patch' und `apt-get upgrade' an zwei unterschiedlichen Stellen verorten.

Als zweite Phase geht es dann darum, zu verstehen, fuer welche Anwendungsfaelle die jeweiligen Befehle hilfreich sein koennen. Es kommt letztlich also darauf an, was man erreichen will.

Du kannst ja mal mit eigenen Worten die obigen Dinge erklaeren und wir helfen dir dann weiter.
Use ed once in a while!

Manfred89
Beiträge: 34
Registriert: 10.02.2023 11:18:01

Re: Programm patch

Beitrag von Manfred89 » 02.09.2023 18:18:35

Als Basis zum Verstaendnis des Unterschieds musst du zuerst folgende Dinge verstehen:
- was ein Binaerpaket ist
- was das Kompilieren von Code bewirkt
- wie Software in Debian installiert ist und was ein Paketmanager macht
  • Es gibt Quelltextdateien, einfach ein Programmcode, der noch nicht kompiliert ist. Dieser wird dann kompiliert, also für den Computer in Maschinensprache übersetzt. Daraus ergeben sich dann Binärpakete.
  • Diese Binärpakete haben zudem noch Konfigdateien, Infos zu den Abhängigkeiten, Bibliotheken, Doku etc.
  • Diese ganzen Dateien werden vom Paketmanager dann in die richtigen Verzeichnisse kopiert (installiert).

  • Der Paketmanager entpackt quasi das Paket und installiert einfach die Dateien in die richtigen Verzeichnisse?
  • Der Befehl Patch aktualisiert die Quelltextdateien (die noch nicht kompiliert sind)

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Programm patch

Beitrag von Meillo » 04.09.2023 07:50:12

Manfred89 hat geschrieben: ↑ zum Beitrag ↑
02.09.2023 18:18:35
Als Basis zum Verstaendnis des Unterschieds musst du zuerst folgende Dinge verstehen:
- was ein Binaerpaket ist
- was das Kompilieren von Code bewirkt
- wie Software in Debian installiert ist und was ein Paketmanager macht
  • Es gibt Quelltextdateien, einfach ein Programmcode, der noch nicht kompiliert ist. Dieser wird dann kompiliert, also für den Computer in Maschinensprache übersetzt. Daraus ergeben sich dann Binärpakete.
Hier ueberspringst du einen Schritt. Wenn man Quellcode kompiliert, erhaelt man Binaerprogramme. Um ein (debian-spezifisches) Paket zu erhalten, muss man Paketieranweisungen hinterlegen und dann mit diesen ein Paket bauen. In den Paketieranweisungen stehen neben Metadaten vor allem Anpassungen, in welche Verzeichnisse die Dateien installiert werden muessen. Man kann dann Sourcepakete oder Binaerpakete bauen. Beide basieren auf dem Upstream-Quellcode und den Paketieranweisungen.

Du musst also unterscheiden, zwischen (a) Upstream-Quellcode und seiner Kompilierung, und (b) Sourcepaketen und Binaerpaketen. Das sind zwei Ebenen mit jeweils zwei Auspraegungen. Die Unterscheidung zwischen den zwei Ebenen scheint bei dir ein bisschen zu verwischen.
Manfred89 hat geschrieben: ↑ zum Beitrag ↑
02.09.2023 18:18:35
  • Diese Binärpakete haben zudem noch Konfigdateien, Infos zu den Abhängigkeiten, Bibliotheken, Doku etc.
  • Diese ganzen Dateien werden vom Paketmanager dann in die richtigen Verzeichnisse kopiert (installiert).
Das Installieren eines Binaerpaketes in Debian ist letztlich nur ein Entpacken eines Archivs, in dem die jeweiligen Verzeichnisse schon enthalten sind. (Zudem werden ggf. Maintainerscripts ausgefuehrt, die noch irgendwas machen.)
Manfred89 hat geschrieben: ↑ zum Beitrag ↑
02.09.2023 18:18:35
  • Der Paketmanager entpackt quasi das Paket und installiert einfach die Dateien in die richtigen Verzeichnisse?
  • Der Befehl Patch aktualisiert die Quelltextdateien (die noch nicht kompiliert sind)
Sobald man auf der Debian-Paketebene ist, ist erstmal kein Quelltext mehr da. Wenn du das Paketsystem verwendest, hast du erstmal keine Moeglichkeit, patch zu nutzen, weil nirgends Quellcodedateien auftauchen.

Willst du Dateien patchen, dann musst du aus der Paketebene in die Quellcode-/Entwicklerebene wechseln, indem du ein Sourcepakete auf der Festplatte auspackst. Dann kannst du patch nutzen. Und dann kannst du daraus z.B. wieder ein (individuelles!) Paket zusammenbauen, das du dann auch installieren kannst. Dafuer musst du aber verstehen, wie das Paketsystem funktioniert. D.h. du musst v.a. die Versionsnummer des Pakets in einer kompatiblen Weise anpassen, die das Paketsystem weiterhin funktionsfaehig haelt.


Nun die Frage, was du inhaltlich eigentlich erreichen willst. Was ist der Anwendungsfall, um den es dir geht? Am konkreten Beispiel wird sich schnell zeigen, welches Vorgehen Sinn macht.
Use ed once in a while!

Manfred89
Beiträge: 34
Registriert: 10.02.2023 11:18:01

Re: Programm patch

Beitrag von Manfred89 » 04.09.2023 12:34:32

Danke dir vielmals für deine Zeit!

Ich möchte mir einfach Wissen aneignen und bin auf das Programm patch gestoßen und habe mich gefragt, warum man das braucht bzw. wo der Unterschied zu einem Update ist.

Im Prinzip werde ich damit wahrscheinlich nicht in Berührung kommen, aber mich interessiert schon grob der Hintergrund dabei.

Nochmals vielen Dank!

Benutzeravatar
Livingston
Beiträge: 1454
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: Programm patch

Beitrag von Livingston » 04.09.2023 12:48:01

Manfred89 hat geschrieben: ↑ zum Beitrag ↑
04.09.2023 12:34:32
Ich möchte mir einfach Wissen aneignen und bin auf das Programm patch gestoßen und habe mich gefragt, warum man das braucht bzw. wo der Unterschied zu einem Update ist.
Es kann auch für Nichtprogrammierer nützlich sein, wenn man es im Gespann mit diff aus Debiandiffutils nutzt. Mit diff lassen sich zwei Textdateien vergleichen und die Unterschiede speichern. patch kann genutzt werden, um diese Unterschiede wieder reinzuoperieren. Keine Ahnung, ob Du das jemals brauchst, ist eben ein nice to have.
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Programm patch

Beitrag von Meillo » 04.09.2023 14:07:55

Manfred89 hat geschrieben: ↑ zum Beitrag ↑
04.09.2023 12:34:32
Ich möchte mir einfach Wissen aneignen und bin auf das Programm patch gestoßen und habe mich gefragt, warum man das braucht [...]
Ach so, dann erzaehle ich dir vielleicht am besten etwas zum Hintergrund von patch (aufbauend auf Livingstons Post).

Ein ueblicher Fall in der Softwareentwicklung und auch generell bei der Arbeit mit Textdateien ist es, herauszufinden, worin sich zwei Versionen der Datei unterscheiden. Also beispielsweise die Version von heute von der Version von gestern oder meine Version von der meines Kollegen. Diese Antwort liefert `diff'. Diff ist ein sehr altes Programm, das zwei Dateien vergleicht und ihre Unterschiede ausgibt. Das was sie ausgibt nennt man einen Diff oder alternativ und gleichbedeutend einen Patch.

Diff kann verschiedene Formate ausgeben. Das heute uebliche Format ist der Unified Diff, das man mit `diff -u' erhaelt. Das Standardformat dagegen ist genau genommen ein Set an Befehlen fuer den Zeileneditor `ed', um aus der einen Datei die andere zu machen. Um mittels eines Unifed Diffs eine Datei in die andere umwandel zu koennen, braucht es ein anderes Programm, und das ist `patch'. Waehrend ed ganz stupide arbeitet, hat patch einige Intelligenz und versucht auch leicht abweichende Patches noch korrekt anzuwenden oder kann die eindeutigen Teile des Patches anwenden und die unklaren dem User zum manuellen einpflegen hinterlassen.

Auf dieses Basis war es dann ueblich, dass man Aenderungsvorschlaege an freie Softwareprojekte einreicht: man laedt sich also den Quellcode des Projekts runter, macht lokal bei sich ein paar Anpassungen, erzeugt dann einen Diff zwischen der Originalversion und der veraenderten Version und schickt diesen dem Projekt zurueck, mit der Bitte um Aufnahme. Die Entwickler konnten dann mit dem Diff also der Patch-Datei die Aenderungen bei sich einspielen, sie anschauen und letztlich aufnehmen.

Alle Versionskontrollsysteme basieren auch darauf, die Aenderungen (mit diff erzeugt und mit patch angewendet) zu erfassen und zu verwalten.

Als Endanwender braucht man heutzutage patch gar nicht mehr. Um es sinnvoll verwenden zu koennen, muss man selber eigentlich auch Entwickler sein. (Frueher, als es noch eher noetig war, waren alle Anwender zumindest halbe Entwickler.) Auch in der Entwicklung machen das die Versionsverwaltungssysteme heutzutage automatisch intern. Ein manueller Aufruf von patch kommt im Alltag kaum noch vor.

Diff dagegen ist durchaus ueblich, wenn man viel in der Shell arbeitet. Damit kann man sich beim Shellscripting das Leben immer wieder mal einfacher machen.

Damit aber genug der Geschichtenerzaehlerei ... Und wenn sie nicht gestorben sind, leben Diff und Patch noch immer gluecklich in der Unix Shell.
Use ed once in a while!

Manfred89
Beiträge: 34
Registriert: 10.02.2023 11:18:01

Re: Programm patch

Beitrag von Manfred89 » 05.09.2023 13:18:00

Hey Merillo,

vielen lieben Dank für die Erläuterung. War für mich nochmal sehr informativ. Deinen Namen muss ich mir merken im Forum! :D

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Programm patch

Beitrag von Meillo » 05.09.2023 13:41:27

Das freut mich sehr!

(Nur solltest du dir auch den richtig geschriebenen Namen merken. ;-) )
Use ed once in a while!

Antworten