# "emerge" vollwertig durch "ebuild" ersetzen

## sprittwicht

Hallo!

Da ich wine jedesmal von Hand patchen muss, um Halflife 2 Deathmatch ans Laufen zu bekommen, benutze ich für dieses Paket nicht "emerge wine", sondern, wie http://www.gentoo.org/doc/en/handbook/2004.2/handbook-amd64.xml?part=3&chap=6 nahelegt:

```

ebuild /usr/portage/app-emulation/wine/wine-0.9.47.ebuild fetch

ebuild /usr/portage/app-emulation/wine/wine-0.9.47.ebuild unpack

...Patch in /var/tmp/portage anwenden...

ebuild /usr/portage/app-emulation/wine/wine-0.9.47.ebuild compile

ebuild /usr/portage/app-emulation/wine/wine-0.9.47.ebuild install

ebuild /usr/portage/app-emulation/wine/wine-0.9.47.ebuild qmerge

ebuild /usr/portage/app-emulation/wine/wine-0.9.47.ebuild clean

```

Das scheint aber das normale "emerge wine" nicht vollständig zu ersetzen, da sich z.B. die Kompilierdauer des manuell installierten wine nicht per genlop anzeigen lässt. Neuere Installationen von wine fehlen in der Ausgabe von genlop schlicht und einfach.

Auch wird die jeweilige Vorgängerversion von wine nicht deinstalliert. Gibt's dafür noch einen ebuild-Schritt oder muss das per "emerge -C" geschehen?

----------

## Necoro

warum kopierst du dir das ebuild nicht, und fügst den patch ins ebuild ein (in die src_unpack) ?

----------

## s.hase

Guck Dir dazu doch mal bashrc-ng an:

http://portage-bashrc.sourceforge.net/

Mit dem Autopatch Modul kannst Du dann automatisch, ohne einen manuellen Eingriff, ebuilds vor dem compilieren patchen lassen.

Gruss

Sebastian

edit:

Hier noch der Forumspost dazu https://forums.gentoo.org/viewtopic-t-472386-highlight-bashrcng.html

und hier ganz speziell zu Deinem Thema mit wine https://forums.gentoo.org/viewtopic-t-577048-highlight-bashrcng.htmlLast edited by s.hase on Tue Oct 16, 2007 8:00 am; edited 1 time in total

----------

## sprittwicht

Ja, wär ne Möglichkeit. Aber trotzdem würde mich interessieren, warum "ebuild ..." anscheinend unvollständig ist.

Insbesondere im Hinblick auf inoffizielle Ebuilds, die man sich ins Portage Overlay packt. Da stand anfangs sogar (in irgendeinem Wiki?) der ausdrückliche Tip, statt "emerge" "ebuild" zu benutzen, da man so im vorletzten Schritt genau sieht, was er da wohin installieren will. Über den direkten Aufruf von "emerge" verlierst du diese Kontrollmöglichkeit und ein schlechter Ebuild kann dir evtl. beim Übertragen von /var/tmp/portage/...../image nach / das System zerschießen.

Allein aus dem Grund ist mir "ebuild" eigentlich sympathischer.

Mittlerweile wurde der "ebuild"-Weg aus besagtem Howto aber auch entfernt, also scheint da irgendwas nicht so ganz koscher zu sein?

----------

## franzf

 *sprittwicht wrote:*   

> Über den direkten Aufruf von "emerge" verlierst du diese Kontrollmöglichkeit und ein schlechter Ebuild kann dir evtl. beim Übertragen von /var/tmp/portage/...../image nach / das System zerschießen.

 

Setz in deiner make.conf das FEATURE "collision-protect". Das prüft vor dem Installieren, ob Dateien, welche nicht zu diesem Paket gehören, überschrieben werden und stoppt in dem Fall.

Und wenn Dateien z.B. nach /usr/local installiert werden (und da nicht funktionieren) sieht man das auch mit emerge und man kann entsprechend das ebuild anpassen. Ich sehe also keinen Grund dafür jetzt nicht ebuilds im Overlay mit emerge zu installieren.

Und dass ebuild nicht vollständig ist, denke ich nicht. Du machst jeden Schritt einzeln, warum sollte dann auf einmal ein weiterer Schritt (deinstallieren einer älteren Version) automatisch mitlaufen? Und ob ich jetzt

```
emerge -C =xyz-1.2.4
```

oder

```
ebuild /pfad/ins/overlay/xyz/xyz-1.2.4.ebuild remove
```

mach ist doch wurscht  :Wink: 

Aber vllt. ist hier die Doku nicht aktuell und es existiert tatsächlich so eine Option für ebuild.

Grüße

Franz

----------

## sprittwicht

OK, das mit dem Deinstallieren alter Versionen ist nachvollziehbar.

Aber was mich wirklich irritiert ist das Fehlen des jeweiligen Paketes in genlop...

----------

## Genone

Die entsprechende Logdatei, die von genlop ausgewertet wird heisst nicht umsonst /var/log/emerge.log ...

Und nein, ebuild(1) ist definitiv kein vollwertiger Ersatz für emerge sondern mehr ein Test- und Entwicklungstool (allein die Grössenverhältnisse sollten das verdeutlichen: 200 Zeilen in ebuild(1), 6500 Zeilen in emerge).

----------

## sprittwicht

Alles klar, danke!

Es las sich damals so als würde emerge beim Installieren eines Pakets nichts anderes machen als mehr oder weniger nur diese paar ebuild-Schritte abzuklappern.

Scheint also aus gutem Grund aus der Dokumentation geflogen zu sein.  :Wink: 

Noch ne Frage zu FEATURES="collision-protect":

Verhindert das auch das Überschreiben von Dateien des gleichen Paketes in älteren Versionen? Für den alltäglichen Einsatz ist dieses Flag dann vermutlich eher nicht zu empfehlen, oder?

Kann ich es für einzelne Pakete anwenden, indem ich emerge so starte?

```
FEATURES="collision-protect" emerge <paket>
```

----------

## Genone

 *sprittwicht wrote:*   

> Verhindert das auch das Überschreiben von Dateien des gleichen Paketes in älteren Versionen?

 

Nein, genaugenommen schaut Portage mit dem Flag für jede zu installierende Datei nach

a) ob sie schon existiert

b) ob sie durch CONFIG_PROTECT geschützt ist

c) ob sie zu einem Paket mit demselben Namen und SLOT gehört

Und nur wenn a) erfüllt ist und sowohl b) als auch c) nicht erfüllt sind wird die Installation abgebrochenLast edited by Genone on Tue Oct 16, 2007 12:46 pm; edited 1 time in total

----------

## franzf

 *sprittwicht wrote:*   

> Noch ne Frage zu FEATURES="collision-protect":
> 
> Verhindert das auch das Überschreiben von Dateien des gleichen Paketes in älteren Versionen? Für den alltäglichen Einsatz ist dieses Flag dann vermutlich eher nicht zu empfehlen, oder?

 

Das Überschreiben von Dateien des Paketes in älteren Versionen klappt schon. Manchmal gibt es aber schon Probleme.

Hatte letztens eines mit ne Python-Modul. Das hat erst zur Laufzeit die *.pyc angelegt. eine neuere Version hat diese per ebuild erstellt. Da die alten *.pyc nicht zum Paket gehört haben, hat emerge abgebrochen. Da collision_protect keine Pakete gefunden hat, zu dem diese Dateien gehört hätten (wie denn auch  :Wink: ) hab ich die dann einfach gelöscht, dann klappte es auch mit collision_protect  :Wink: 

Ich hab das jetzt seit 1-2 Monaten am Laufen, und nur sehr selten kommt es zu (meist trivialen) Problemen.

Grüße

Franz

----------

