# Code-Änderung bei Emerge

## uli

Hallo,

ich hab da so ne einfache Frage   :Very Happy:  :

Emergen ist prima und komfortabel. Das hält einen aber davon ab, tiefer einzusteigen.

Nun möchte ich aber in einem Paket eine kleine Programmänderung zwecks Optimierung durchführen.

Wenn ich emerge ausführe, läuft alles prima. Aber eben ohne Änderung. Ich meine daß nun anschliessend die Dateien gepackt in /usr/prtage/distfiles stehen. Da könnte ich doch nun eine Programmänderung vornehmen. Müsste aber wieder neu übersetzen.

Eine andere Möglichkeit ist ja wohl das Patchen.

Wie ist denn die richtige Vorgehensweise um eine "emergte" Software zu modifizieren (= Änderung im C-Quellcode)?

Danke für Hinweise

Uli

----------

## treor

am einfachsten dürfte sein das ebuild aus dem portage-tree in dein portage-overlay zu kopieren, einen kleinen patch zu schreiben und den dann passend im ebuild einzutragen.

----------

## TheSmallOne

Eventuell hilft es auch anstelle von emerge einfach ebuild zu verwenden. Wenn ich das richtig sehe kann man die Schritte eines emerge-Vorgangs damit einzeln durchführen, also auch zwischen entpacken und kompilieren eine Pause einlegen, in der man dann den Code bearbeiten kann.

Ich schätze allerdings dass man dann bei eventuellen Updates aufpassen und die Schritte wiederholen muß.

----------

## uli

 *Quote:*   

> Eventuell hilft es auch anstelle von emerge einfach ebuild zu verwenden. Wenn ich das richtig sehe kann man die Schritte eines emerge-Vorgangs damit einzeln durchführen, also auch zwischen entpacken und kompilieren eine Pause einlegen, in der man dann den Code bearbeiten kann. 

 

Kann ich ebuild als Kommando aufrufen? Und wie einen einzelnen Schritt?

 *Quote:*   

> Ich schätze allerdings dass man dann bei eventuellen Updates aufpassen und die Schritte wiederholen muß.

 

Das ist klar. Birgt sicher ein gewisses Risiko, es später zu vergessen.

Uli

----------

## Finswimmer

man ebuild

Es gibt fetch, unpack, compile, merge und noch ein paar Zwischenschritte.

----------

## Anarcho

 *uli wrote:*   

>  *Quote:*   Eventuell hilft es auch anstelle von emerge einfach ebuild zu verwenden. Wenn ich das richtig sehe kann man die Schritte eines emerge-Vorgangs damit einzeln durchführen, also auch zwischen entpacken und kompilieren eine Pause einlegen, in der man dann den Code bearbeiten kann.  
> 
> Kann ich ebuild als Kommando aufrufen? Und wie einen einzelnen Schritt?

 

man ebuild

 *uli wrote:*   

>  *Quote:*   Ich schätze allerdings dass man dann bei eventuellen Updates aufpassen und die Schritte wiederholen muß. 
> 
> Das ist klar. Birgt sicher ein gewisses Risiko, es später zu vergessen.
> 
> Uli

 

Daher mache ich es auch per Overlay und Patch.

----------

## Necoro

 *TheSmallOne wrote:*   

> Eventuell hilft es auch anstelle von emerge einfach ebuild zu verwenden. Wenn ich das richtig sehe kann man die Schritte eines emerge-Vorgangs damit einzeln durchführen, also auch zwischen entpacken und kompilieren eine Pause einlegen, in der man dann den Code bearbeiten kann.
> 
> Ich schätze allerdings dass man dann bei eventuellen Updates aufpassen und die Schritte wiederholen muß.

 

Naja ... emerge paket ist schon mehr als die summe von ebuild schritten ... gab es schon mal in nem anderen thread, dass da jmd auf die nase gefallen ist  :Smile: ... also das mit dem ebuild im overlay und einem patch ist eigentlich konsistenter  :Wink: 

----------

## Finswimmer

 *Necoro wrote:*   

>  *TheSmallOne wrote:*   Eventuell hilft es auch anstelle von emerge einfach ebuild zu verwenden. Wenn ich das richtig sehe kann man die Schritte eines emerge-Vorgangs damit einzeln durchführen, also auch zwischen entpacken und kompilieren eine Pause einlegen, in der man dann den Code bearbeiten kann.
> 
> Ich schätze allerdings dass man dann bei eventuellen Updates aufpassen und die Schritte wiederholen muß. 
> 
> Naja ... emerge paket ist schon mehr als die summe von ebuild schritten ... gab es schon mal in nem anderen thread, dass da jmd auf die nase gefallen ist ... also das mit dem ebuild im overlay und einem patch ist eigentlich konsistenter 

 

Außerdem hat man die Mühe nur einmal und nicht bei jedem recompile...

Tobi

----------

## uli

Danke schon mal für all die Tips.

Kann mir jemand in Einzelschritten anhand eines einfachen Beispiels erklären wie das mit Overlay und Patch vor sich geht? Ich bin gern bereit auch irgendetwas nachzulesen. Aber typischerweise ist das zumeist zuviel oder man findet den richtigen Baum im Wald nicht.

Uli

----------

## Anarcho

1.  Ebuilds kopieren

z.B.

```
mkdir -p /usr/local/portage/sys-kernel/

cp -a /usr/portage/sys-kernel/xen-sources /usr/local/portage/sys-kernel/
```

2. patch kopieren

```
cp patch /usr/local/portage/sys-kernel/xen-sources/files
```

3. Ebuild anpassen, in der Funktion src_unpack folgende Zeile einfügen

```
epatch ${FILEDIR}/patch
```

4. Ebuild digest anpassen

```
ebuild /usr/local/portage/sys-kernel/xen-sources/xen-sources-2.6.20.ebuild digest
```

(5. /etc/make.conf anpassen und Overlay eintragen:)

```
PORTDIR_OVERLAY=/usr/local/portage/
```

6. Ausprobieren

----------

## uli

Hi Anarcho,

danke erst mal.

Habe noch Widersprüchliches gefunden:

In http://gentoo-wiki.com/HOWTO_Create_an_Updated_Ebuild steht

 *Quote:*   

> cp /usr/portage/net-irc/xchat/xchat-2.0.8.ebuild /usr/local/portage/net-irc/xchat/xchat-2.0.9.ebuild

 

Also wird das ebuild mit ner neuen Nummer kopiert. Das Erzeugen eines Manifests mit digest

 *Quote:*   

> ebuild /usr/local/portage/net-irc/xchat/xchat-2.0.9.ebuild digest

 

führt bei mir zum Abbruch weil dann nach einem Paket mit dieser Nummer gesucht wird und das eben nicht existiert.

Also hab ich es ähnlich gemäß Deinem Vorschlag gemacht. Wobei beim ebuild digest auch plötzlich ne neue Nummer auftaucht. ???

Ich hab dann einfach die alte Nummer gelassen und dann hat alles geklappt.

Uli

----------

## franzf

 *uli wrote:*   

> Das Erzeugen eines Manifests mit digest
> 
>  *Quote:*   ebuild /usr/local/portage/net-irc/xchat/xchat-2.0.9.ebuild digest 
> 
> führt bei mir zum Abbruch weil dann nach einem Paket mit dieser Nummer gesucht wird und das eben nicht existiert.
> ...

 

Die Nummer hinten ist nicht die Versions-Nummer des ebuilds sondern die deines Programmes! Wenn die höchste Version von xchat 2.0.8 ist kann er natürlich nicht die Sourcen zu 2.0.9 finden!

Grundsätzlich wirst du, wenn du nur die aktuellste Version in Portage patchen willst, das Ebuild samt Versionsnummer kopieren. Ein Umbenennen in eine höhere Version ist erstmal nicht notwendig, denn es werden immer automatisch die Ebuilds aus dem Overlay verwendet (bei gleicher Version/Maskierung)!

Grüße

Franz

----------

## uli

Danke. Nun weiss ich wie es geht.

Uli

----------

