Manuelles Patchen bei emerge?

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Manuelles Patchen bei emerge?

Matthias Hanft
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.

Reply | Threaded
Open this post in threaded view
|

Re: Manuelles Patchen bei emerge?

Khaosgrille
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 ‐‐‐‐‐‐‐
On Wednesday, June 12, 2019 12:24 PM, Matthias Hanft <[hidden email]> wrote:

> 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.


publickey - Khaosgrille@protonmail.com - 0xE78BC986.asc (2K) Download Attachment
signature.asc (523 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Manuelles Patchen bei emerge?

David Haller-5
Hallo,

Am Wed, 12 Jun 2019, Khaosgrille schrieb:
>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

Reply | Threaded
Open this post in threaded view
|

Re: Manuelles Patchen bei emerge?

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

Richtich!

> # 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]
>>> 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.

Reply | Threaded
Open this post in threaded view
|

Re: Manuelles Patchen bei emerge?

Felix Kuperjans
Hallo Matthias,

Am 12.06.19 um 15:09 schrieb 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


Reply | Threaded
Open this post in threaded view
|

Re: Manuelles Patchen bei emerge?

David Haller-5
Hallo,

Am Wed, 12 Jun 2019, Felix Kuperjans schrieb:

>Am 12.06.19 um 15:09 schrieb 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.
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

vdr-epgsearch-2.2.0-no_erase_of_iterator_inside_loop.patch (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Manuelles Patchen bei emerge?

Matthias Hanft
In reply to this post by Felix Kuperjans
Felix Kuperjans schrieb:
>
>>  * 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...

> 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.