Discussion:
[gentoo-user-de] Manuelles Patchen bei emerge?
(zu alt für eine Antwort)
Khaosgrille
2019-06-12 10:30:01 UTC
Permalink
Hi,

das geht wie hier beschrieben: https://wiki.gentoo.org/wiki//etc/portage/patches

Also im Prinzip muss der Patch da als /etc/portage/patches/${CATEGORY}/${P} liegen.




Liebe Grüße
Khaosgrille




‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
Hallo,
ich würde gerne beim emerge-Vorgang gelegentlich noch schnell manuell
etwas im Sourcecode ändern (zwischen Holen der Sourcefiles und dem
Compilieren) - ist das möglich, und wenn ja, wie? Ich habe zwar schon
"emerge -f" gefunden, was das Zeug angeblich nur holt statt gleich zu
compilieren, aber die Sources finde ich trotzdem nirgendwo, und ich
wüsste auch nicht, wie ich dann weitermachen sollte.
Konkret würde ich gerne in media-plugins/vdr-epgsearch die zwei winzigen
Änderungen von der Seite
https://projects.vdr-developer.org/git/vdr-plugin-epgsearch.git/commit/?id=49ba796fe6298abf0ebba68a25ddfc92d3d70aad
einbauen (die den Segfault seit letzter Woche ausmerzen sollen). Wäre
im Source mit vi ja ganz simpel zu korrigieren, aber wo, wann und wie?
(Ich bin nicht der große Patch-Freak. Ich kann Apache, Postfix & Co.
installieren und - auch sehr komplex - konfigurieren, aber was Compi-
lieren, Patchen & Co. anbelangt, bin ich der totale Noob; da verlasse
ich mich bisher immer auf emerge...)
Danke & Gruß Matthias.
David Haller
2019-06-12 11:20:02 UTC
Permalink
Hallo,
Post by Khaosgrille
das geht wie hier beschrieben: https://wiki.gentoo.org/wiki//etc/portage/patches
Also im Prinzip muss der Patch da als /etc/portage/patches/${CATEGORY}/${P} liegen.
Konkret würde ich gerne in media-plugins/vdr-epgsearch die zwei winzigen
Änderungen von der Seite
https://projects.vdr-developer.org/git/vdr-plugin-epgsearch.git/commit/?id=49ba796fe6298abf0ebba68a25ddfc92d3d70aad
einbauen (die den Segfault seit letzter Woche ausmerzen sollen). Wäre
im Source mit vi ja ganz simpel zu korrigieren, aber wo, wann und wie?
[..]

Also konkret, ich nehme mal an, du beziehst dich auf die ~amd Version
media-plugins/vdr-epgsearch-2.2.0...:

# mkdir -p /etc/portage/patches/media-plugins/vdr-epgsearch-2.2.0
# chmod -cR a+rX /etc/portage/patches/media-plugins/
# cd /etc/portage/patches/media-plugins/vdr-epgsearch-2.2.0
# wget -O vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch \
'https://projects.vdr-developer.org/git/vdr-plugin-epgsearch.git/patch/?id=49ba796fe6298abf0ebba68a25ddfc92d3d70aad'
# chmod -c a+r vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch

Und das war's schon.

Achso, ggfs. statt "-2.2.0" eben "-1.0.1" verwenden wenn es um die
stable-Version geht.

Durch die Version im Verzeichnisnamen -2.2.0 wird der Patch nur
bei dieser angewendet, wenn dann 2.2.1 _mit_ dem Patch rauskommt
fliegt emerge nicht auf die Nase, weil der Patch nicht zweimal
angewendet werden kann. Andererseits: wenn man das öfter macht kann
sich "Müll" in /etc/portage/patches ansammeln, ohne die Version würde
emerge eben wg. zweifach anwenden des patches meckern und man könnte
sich erinnern und den Patch löschen... Muß man eben überlegen was wann
geeigneter ist...

HTH,
-dnh
--
Optimization matters *only* when it matters. When it matters, it matters a
lot, but until you know that it matters, don't waste a lot of time doing it.
Even if you know it matters, you need to know *where* it matters.
-- Joseph M. Newcomer
Matthias Hanft
2019-06-12 13:10:01 UTC
Permalink
Post by David Haller
Also konkret, ich nehme mal an, du beziehst dich auf die ~amd Version
Richtich!
Post by David Haller
# mkdir [...]
Und das war's schon.
Das ist ja einfach :-) Allerdings bringt emerge (oder ebuild clean prepare)
jetzt die Fehlermeldung

* vdr-epgsearch-2.2.0.tgz BLAKE2B SHA512 size ;-) ... [ ok ]
* Compiling against
* vdr-2.2.0 [API version 2.2.0]
Post by David Haller
Unpacking source...
Unpacking vdr-epgsearch-2.2.0.tgz to /var/tmp/portage/media-plugins/vdr-epgsearch-2.2.0/work
Source unpacked in /var/tmp/portage/media-plugins/vdr-epgsearch-2.2.0/work
Preparing source in /var/tmp/portage/media-plugins/vdr-epgsearch-2.2.0/work/vdr-plugin-epgsearch-2.2.0 ...
* Applying vdr-epgsearch-2.2.0_makefile.diff ... [ ok ]
* Applying vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch ...
2 out of 2 hunks FAILED -- saving rejects to file conflictcheck.c.rej [ !! ]
* ERROR: media-plugins/vdr-epgsearch-2.2.0::gentoo failed (prepare phase):
* patch -p1 failed with /etc/portage/patches/media-plugins/vdr-epgsearch-2.2.0/vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch
*
* Call stack:
* ebuild.sh, line 124: Called src_prepare
* environment, line 1647: Called vdr-plugin-2_src_prepare
* environment, line 2875: Called vdr-plugin-2_src_util 'prepare'
* environment, line 2900: Called vdr-plugin-2_src_util 'add_local_patch' 'patchmakefile' 'linguas_patch' 'i18n'
* environment, line 2908: Called eapply_user
* environment, line 691: Called eapply '/etc/portage/patches/media-plugins/vdr-epgsearch-2.2.0/vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch'
* environment, line 661: Called _eapply_patch '/etc/portage/patches/media-plugins/vdr-epgsearch-2.2.0/vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch'
* environment, line 599: Called __helpers_die 'patch -p1 failed with /etc/portage/patches/media-plugins/vdr-epgsearch-2.2.0/vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch'
* isolated-functions.sh, line 119: Called die
* The specific snippet of code:
* die "$@"

Ich bin nicht sicher, ob und welcher Header-Zeilen man im dem Patchfile
drinlassen muss.... oder liegts an ganz was anderem?

Gruß Matthias.
Felix Kuperjans
2019-06-12 14:30:01 UTC
Permalink
Hallo Matthias,
Post by Matthias Hanft
* Applying vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch ...
2 out of 2 hunks FAILED -- saving rejects to file conflictcheck.c.rej
Du kannst in dieser Datei mal nachgucken, was mit deinem Patch nicht
funktionierte. Aus irgendeinem Grund lässt er sich nicht auf den
Quelltext anwenden.

Der Workspace müsste noch in /var/tmp/portage/ liegen, ansonsten noch
ein cooler Trick, um den Workspace zu bekommen:

ebuild filepath.ebuild prepare

erstellt dir in /var/tmp/portage (oder was du als PORTAGE_TMPDIR
konfiguriert hast) den Workspace, so dass du selber darauf rumpatchen
kannst (prepare im Gegensatz zu unpack wendet auch Gentoo Patches
bereits an sowie deine Patches aus /etc/portage/patches).
Um dann einen neuen Patch zu erstellen, ist git sehr hilfreich, wie in
diesem Howto erklärt:

https://wiki.gentoo.org/wiki/Patches

Damit solltest du deinen Patch ins korrekte Format bringen können, so
dass er sich auch anwenden lässt.

Viele Grüße
Felix
David Haller
2019-06-12 15:00:02 UTC
Permalink
Hallo,
Post by Felix Kuperjans
Post by Matthias Hanft
* Applying vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch ...
2 out of 2 hunks FAILED -- saving rejects to file conflictcheck.c.rej
Du kannst in dieser Datei mal nachgucken, was mit deinem Patch nicht
funktionierte. Aus irgendeinem Grund lässt er sich nicht auf den
Quelltext anwenden.
Der Workspace müsste noch in /var/tmp/portage/ liegen, ansonsten noch
ebuild filepath.ebuild prepare
erstellt dir in /var/tmp/portage (oder was du als PORTAGE_TMPDIR
konfiguriert hast) den Workspace, so dass du selber darauf rumpatchen
kannst (prepare im Gegensatz zu unpack wendet auch Gentoo Patches
bereits an sowie deine Patches aus /etc/portage/patches).
Um dann einen neuen Patch zu erstellen, ist git sehr hilfreich, wie in
https://wiki.gentoo.org/wiki/Patches
Damit solltest du deinen Patch ins korrekte Format bringen können, so
dass er sich auch anwenden lässt.
Als Ergänzung: nach dem 'ebuild foo.ebuild prepare' kann man dann noch

# ebuild foo.ebuild compile
# ebuild foo.ebuild package
# emerge -k foo

folgen lassen... ;) 'ebuild foo.ebuild merge' funktioniert auch, macht
aber irgendwas anders, jedenfalls taucht z.B. ein per 'ebuild .. merge'
installiertes Paket nicht in 'qlop -l' auf (und/oder genlop)...

Jedenfalls: der patch passt einfach nicht mehr zu den Sourcen...

Ich hab den mal angepasst ("rebased"), siehe Anhang ;)

HTH,
-dnh
--
[PHP ist ein] total inkonsistenter Moloch, der mehr Funktionen als Funktiona-
lität hat, bei dem aber nichts anständig designt respektive implementiert ist
und bei dessen Benutzung man ständlich auf der Suche nach dem Workaround zum
Workaround für den Fehler im Workaround zum Designfehler ist. -- E. Schwenk
Matthias Hanft
2019-06-12 15:20:02 UTC
Permalink
Post by Felix Kuperjans
Post by Matthias Hanft
* Applying vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch ...
2 out of 2 hunks FAILED -- saving rejects to file conflictcheck.c.rej
Du kannst in dieser Datei mal nachgucken, was mit deinem Patch nicht
funktionierte. Aus irgendeinem Grund lässt er sich nicht auf den
Quelltext anwenden.
In dieser Datei stand einfach nochmal der originale Quelltext
aus der .patch-Datei, das hat mir also nicht weitergeholfen.

Aber...
Post by Felix Kuperjans
Der Workspace müsste noch in /var/tmp/portage/ liegen, ansonsten noch
ein cooler Trick, um den Workspace zu bekommen: [...]
...bei Fehlern bleibt .../work mit den Sourcefiles eh stehen.
Ich bin dann da reingegangen, hab das fragliche File in zwei
Subdirectories a und b kopiert, in b die zwei Zeilen schnell
mitm vi korrigiert und dann "diff -Nub a/conflictcheck.c
b/conflictcheck.c > /etc/patches.../mein.patch" gemacht. Das
hatte dann wohl das richtige Format, denn damit hats nun
funktioniert.

Herzlichen Dank an alle Beteiligten - ich habe viel dazu-
gelernt! :-)

Gruß Matthias.

Loading...