# eigener xf86-video-intel Treiber vs. Emerge [solved]

## spork

Moin moin,

ich wollte mal fragen, ob es eine Moeglichkeit gibt Pakete als 'emerged' anzunehmen bzw. beim 'emergen' irgendwie zu auszulassen. 

Hintergrund: Ich habe einen Laptop mit 2 Grafikkarten (nvidia und intel) und verwende daher Optimus/Bublebee. Nun habe ich einen xf86-video-intel Treiber im Einsatz den ich selber patche und kompiliere - soweit ich das gesehen habe gibt es kein Overlay das mir den Treiber so bietet. Diesen benoetige ich allerdings, da es mir sonst nicht moeglich ist auf einen zweiten Monitor zu erweitern, welcher ueber den VGA-Port (hardwired zur Nvidia-Karte) angeschlossen ist. Das funktioniert mittlerweile auch alles wie gewuenscht aber:

Da ich in meiner make.conf unter 'VIDEO_CARDS' immer noch 'intel' mit eingetragen habe und so wie ich das sehe auch nicht einfach entfernen sollte, wird bei einem Update (xorg-drivers sei Dank) der Treiber aus Portage nachinstalliert. Das moechte ich aber natuerlich vermeiden. Ein einfaches Maskieren des intel Treibers hilft hier leider nicht weiter, da es natuerlich zur Blockierung fuehrt. Es waere schoen, wenn fuer einzelne Pakete VIDEO_CARDS wie USE-flags verwendet werden koennte, mir ist jedoch nicht bekannt, dass es soetwas funktioniert. Die einzige Idee die ich jetzt noch habe, ist ein eigenes ebuild zu schreiben. Bevor ich dieses jedoch tue, wollte ich einmal kurz in die Runde fragen, ob jemand eine andere Idee hat.

M.f.G. sporkLast edited by spork on Mon Nov 26, 2012 1:48 pm; edited 1 time in total

----------

## Christian99

Hi, ja das geht, indem du in eine datei /etc/portage/package.provided den paketnamen "x11-drivers/xf86-video-intel"  einträgst. dann wird emerge annehmen, das paket sei installiert.

Nach deinen Ausführungen gibt es mMn eine bessere Methode:

ich weiß nicht, wie genau du dich mit portage auskennst, aber ein emerge prozess besteht aus mehreren phasen. so grob die wichtigsten:

src_unpack src_prepare src_configure src_compile src_install (genau: siehe hier: http://devmanual.gentoo.org/ebuild-writing/functions/index.html)

die phasen sind als bash funktionen ausgeführt. und portage untestützt sogenannte phase hooks. du kannst vor und nach jeder phase (post_{phasename} und pre_{phasename}) eigene funktionen einschieben.

das geht indem du eine entsprechende funktion schreibst. die liegt in einer datei in /etc/portage/env. dort erstellst du ein verzeichnis mit dem category-name ( x11-drivers in deinen fall) und in diesem verzeichis eine datei mit dem paketnamen (xf86-video-intel hier). da schreibst du dann, wenn du einen zusätlichen patch anbringen willst z.b. eine post_src_prepare funktion ungefähr so:

```

post_src_prepare(){

epatch /path/to/patch/file

}

```

epatch ist eine portagefunktiion die patch mit der angegebenen datei auf das src verzeichnis anwendet und dabei bei fehlschlag mehrere strip level ausprobiert. ausführlichere übersicht zu den helperfunctions hier: http://devmanual.gentoo.org/eclass-reference/ebuild/index.html

dasganze ist zwar erstmal mehr arbeit, aber erfahrungsgemäß gibt es langfristig mehr probleme wenn man an portage vorbei installiert.

Falls du noch fragen hast, ich bin zwar kein experte, aber ab und zu hab ich sowas schon mal verwendet und kenn mich ein bisschen damit aus.

viel erfolg

Christian

----------

## spork

Hallo Christian99,

vielen Dank fuer deine kompetente Hilfe  :Very Happy:  . Hat alles wie am Schnuerchen funktioniert. Die Hooking Variante gefaellt mir sehr gut, ging schnell und fuehrte zum gewuenschten Ergebnis!

M.f.G. Spork

----------

## toralf

Patchen geht seit EAPI 4 noch viel einfacher, einfach ein entsprechendes Verzeichnis (je nach Lage auch mit konkreter Paketversion) erzeugen und den eigenen Patch eintragen :

```
tfoerste@n22 ~ $ cat /etc/portage/patches/sys-kernel/genkernel/init.patch 

--- /usr/share/genkernel/defaults/linuxrc       2012-11-23 10:33:08.790280626 +0100

+++ /usr/share/genkernel/defaults/linuxrc.orig  2012-11-23 10:32:28.792922392 +0100

@@ -936,7 +936,7 @@

 

 echo -e "${BOLD}.${NORMAL}"

 

-exec /sbin/switch_root -c "/dev/console" "${CHROOT}" "${REAL_INIT:-/sbin/init}" "${INIT_OPTS}"

+exec /sbin/switch_root -c "/dev/console" "${CHROOT}" "${REAL_INIT:-/sbin/init}" "${INIT_OPTS}" "$@"

 

 # If we get here, something bad has happened

 splash 'verbose'

```

Wenn das konkrete Paket noch nicht auf EAPI 4 ist, einfach einen bug report aufmachen.

Anemrkeung: Das konkrete Beispiel funktioniert noch nicht, da das genkernel ebuild noch die veraltete EAPI hat.

----------

