# /etc/portage/packages.keywords automatisieren (~x86 Gnome)

## sven-tek

Ich hab das Problem das ich mit

ACCEPT_KEYWORDS="~x86" emerge gnome

auf gnome 2.8.0-r1 umgestiegen bin.

nun bekam ich immer:

```
 emerge -up world

These are the packages that I would merge, in order:

Calculating world dependencies \

!!! All ebuilds that could satisfy ">=app-text/ggv-2.8" have been masked.

!!! One of the following masked packages is required to complete your request:

- app-text/ggv-2.8.0 (masked by: ~x86 keyword)

For more information, see MASKED PACKAGES section in the emerge man page or

section 2.2 "Software Availability" in the Gentoo Handbook.

!!!    (dependency required by "gnome-base/gnome-2.8.0-r1" [ebuild])

!!! Problem with ebuild gnome-base/gnome-2.8.0-r1

!!! Possibly a DEPEND/*DEPEND problem.

!!! Depgraph creation failed.

```

und davon ne Menge.

also um nach und nach alle diese Pakete in packages.keywords einzutragen hab ich mir den hier einfallen lassen:

```
emerge -up world |grep -e ".*could satisfy \(.*\) have been.*" |sed -e 's/"//g' |sed -e 's/.*could satisfy \(.*\) have been.*/\1 ~x86/g' >> /etc/portage/package.keywords && tail -n3 /etc/portage/package.keywords
```

Das wiederholt man bis irgendwann kein neues Paket am ende hinzukommt.

wenn jemand ne elegantere Lösung dafür weiß, ich wäre dafür dankbar denn das man nun *jedes* Paket per hand eintragen muss kanns jawohl nicht sein oder? Ich bin doch kein SuSEabhängigkeitenSelberAuflöserLast edited by sven-tek on Fri Dec 17, 2004 8:35 pm; edited 1 time in total

----------

## hoschi

du musst

gnome-base/gnome in die package.keywords packen und dann gnome 2.8 mergen, alles anderen ist faktisch nicht korrekt.

accept blabla ist obsolet

dann führt emerge -u world ein ganz normales update des systems aus, und meckert auch nicht  :Smile: 

falls du allerdings ein emerge -uD world machen willst musst du alle gnome pakete in die package.keywords packen, führt leider kein weg dran vorbei.

ich finds auch doof, sollte geändert werden  :Sad: 

ich für meinen teil sitze das aus bis gnome 2.8 stable ist und update so lange ohne "D", wenn ich die ganzen abhängigkeiten jetzt immer mit update kriege ich am ende nur ärger wenn ich wieder auf stable schalte.

wie war das nochmal...einmal testing, immer testing   :Laughing: 

----------

## Kathars!s

warten bis irgendein depp die komplette liste postet, z.b. hier:

https://forums.gentoo.org/viewtopic.php?t=248385&highlight=gnome

mal abgesehen davon das

```
ACCEPT_KEYWORDS="~x86" emerge wasAuchImmer
```

absolut PFUI ist  :Wink:  (siehe Portage-Forum), halte ich deine Lösung für sehr elegant.

mit

```
less /usr/portage/gnome-base/gnome/gnome-2.8.0-r1.ebuild | grep ">="
```

kommst du auch an die gesamte liste, falls es dich nicht stört das eine oder andere paket zuviel aus ~x86 zu nehmen, kannste die liste ja relativ komplett übernehmen mit ein paar anpassungen.

dit:

 *hoschi wrote:*   

> ich für meinen teil sitze das aus bis gnome 2.8 stable ist und update so lange ohne "D", wenn ich die ganzen abhängigkeiten jetzt immer mit update kriege ich am ende nur ärger wenn ich wieder auf stable schalte.

 

dagegen sollte ein eintrag der form

```
=app-misc/foo-version ~x86
```

in der /etc/portage/package.keywords helfen.

mfg Tilmann

----------

## sven-tek

das 

ACCEPT_KEYWORDS="~x86" emerge wasAuchImmer

nicht gut ist weiß ich erst seitdem ich portage aufn neuen stand gebracht hatte, da hatte ich schon gnome 2.8.0 drauf.

Ich wurde dann mit tiefroter Schrift drauf hingewiesen das ich böse bin. Hatte vorher aber nie Probleme damit es anzuwenden. Zumal ich dann zum updaten des Systems immer emerge -U world gemacht habe.

Das ist mir nun alles verboten worden, mehr oder weniger, und das erste was ich machen muss ist ne liste mit 40 abhängigkeiten zu erstellen um mein System noch updaten zu können *HALLO* muss das sein - wenn er meint maskierte Pakete sind nix gut soll er die doch einfach weglassen und mich drauf hinweisen.

Da hab ich gentoo mal kurz in Frage gestellt, das kanns nicht sein.

----------

## muecke

Hab dazu noch ein Problem

hab auch alles in /etc/portage/package.keywords so eingetragen wie im Forum und auch im Handbuch geschrieben steht nur krieg ich nicht auf die Reihe dass er mir genau das Packet nimmt was ich will

media-video/nvidia-kernel ~x86

media-video/nvidia-glx ~x86

x11-base/opengl-update ~x86

wo muss ich noch was aendern

----------

## psyqil

```
=media-video/nvidia-kernel-1.0.6629 ~x86

=media-video/nvidia-glx-1.0.6629 ~x86

=x11-base/opengl-update-1.8.1-r1 ~x86
```

----------

## muecke

hab alles so eingetragen, will aber den 1.0.6111-r2 wieder haben, und das kommt dabei raus

bash-2.05b# emerge =media-video/nvidia-kernel-1.0.6111-r2

Calculating dependencies   

!!! All ebuilds that could satisfy "=media-video/nvidia-kernel-1.0.6111-r2" have been masked.

!!! One of the following masked packages is required to complete your request:

- media-video/nvidia-kernel-1.0.6111-r2 (masked by: -* keyword)

For more information, see MASKED PACKAGES section in the emerge man page or 

section 2.2 "Software Availability" in the Gentoo Handbook.

hab zur Zeit nur eine aufloesung von 640x480

----------

## Fibbs

Auch ich hatte das Problem, dass ich vor einiger Zeit Gnome 2.8 installieren wollte, und sehr viele Pakete (@muecke: So schreibt man das!) demaskieren musste.

Ich habe mir dazu ein schrecklich hässliches Script geschrieben, welches ich eigentlich keinesfalls empfehlen möchte, mir aber geholfen hat, nicht alles manuell eintragen zu müssen.

```

#!/bin/bash

MASKING_READY="0"

while [ "$MASKING_READY" == "0" ]; do

        emerge -pv $1 > /tmp/emerge

        PACKAGE=`grep 'have been masked' /tmp/emerge | sed 's/.*satisfy\ \"//' | sed 's/\".*//'`

        if [ "${PACKAGE}" ]; then

                echo "The following Package is masked: ${PACKAGE}."

                SHORTPACKAGE=`echo ${PACKAGE} | sed 's/.*\///'`

                MASKSTRING=`grep 'masked by:' /tmp/emerge | grep ${SHORTPACKAGE}`

                if ! [ "${MASKSTRING}" ]; then

                        MASKSTRING=`grep 'masked by:' /tmp/emerge | tail -n 1`

                fi

                echo "Mask: $MASKSTRING"

                KEYWORDS=`echo ${MASKSTRING} | grep '~keyword'`

                MASK=`echo ${MASKSTRING} | grep 'package.mask'`

                if [ "$KEYWORDS" ]; then

                        echo "Adding ${PACKAGE} to package.keywords"

                        echo "${PACKAGE} ~x86" >> /etc/portage/package.keywords

                fi

                if [ "$MASK" ]; then

                        echo "Adding ${PACKAGE} to package.unmask"

                        echo "${PACKAGE}" >> /etc/portage/package.unmask

                fi

                MASKING_READY="0"

        else

                echo "Fertig!"

                MASKING_READY="1"

        fi

done

```

Ich denke, es ist klar, wie es funktioniert. Ich rufe das Script mit ./boesesscript.sh gnome auf, nachdem ich gnome-base/gnome-2.8 unmaskiert und in die package.keywords eingetragen habe.

Daraufhin ruft das Script 'emerge -pv gnome' auf und schreibt die Ausgabe in ein temporäres File. Dieses File wird überprüft, ob es die Fehlermeldung gegeben hat weil ein dependency-Paket gemasked ist und deshalb die Installation nicht möglich ist. Anschließend schaut das Script noch, ob es sich um eine HartMaskierung oder eine KeywordMaskierung handelt und schreibt den entsprechenden String in die entsprechende Datei. Dann wird wieder 'emerge -p gnome' aufgerufen, solange bis keine Maskierungen mehr da sind.

Das Script funktioniert natürlich auch mit anderen Metapaketen bzw. Paketen mit mehreren unstable-dependencies.

Allerdings bitte Vorsicht in der Benutzung, Unbedingt vorher eine Kopie von /etc/portage/package.[keywords|unmask] machen, ich kann für nichts garantieren.

Wenn jemand Lust hat, dieses Script mal sauber zu schreiben darf er das gern tun und vielleicht hier nochmal posten.

Servus!

Fibbs

----------

## psyqil

 *muecke wrote:*   

> hab alles so eingetragen

 Was genau bitte?

----------

## muecke

so wie du es geschrieben hast und es kommt immer noch die gleiche Fehlermeldung

=media-video/nvidia-kernel-1.0.6111 ~x86

=media-video/nvidia-glx-1.0.6111 ~x86

=x11-base/opengl-update-1.8.1-r1 ~x86

und ich kann diese Packete immer noch nicht emergen

 :Crying or Very sad: 

----------

## psyqil

Ah!  :Very Happy:  Du willst ja -r2, also entweder

```
=media-video/nvidia-kernel-1.0.6111-r2 ~x86
```

oder

```
~media-video/nvidia-kernel-1.0.6111 ~x86
```

----------

## Stere

 *hoschi wrote:*   

> ich für meinen teil sitze das aus bis gnome 2.8 stable ist

 

Hat jemand eine Ahnung (Glaskugel), wann das sein wird? Bis jetzt war Gentoo immer sehr aktuell, aber diesmal klemmts irgendwo, oder?

Habe hier auf einer zweiten Kiste Ubuntu mit Gnome 2.8 ohne Probleme laufen und Fedora Core 3 hat schon 2.8.1 drin. Gnome 2.8 <--> Gentoo, beißt sich da was? Hat hier jemand genauere Infos zu dem Thema?

----------

## sven-tek

mir scheint in der hinsicht der portage auch etwas pflegebedürftig, auch das der kernel 2.6 immernoch als -dev gehandelt wird ist nicht schön.

----------

## ralph

 *sven-tek wrote:*   

> mir scheint in der hinsicht der portage auch etwas pflegebedürftig, auch das der kernel 2.6 immernoch als -dev gehandelt wird ist nicht schön.

 

Sorry, aber ich kann es einfach nicht mehr hören und du bist jetzt rein zufällig mein Opfer.

Gnome 2.8 war praktisch sofort für jeden gentoo Nutzer, der es denn nutzen wollte durch portage zugänglich, wo also liegt genau das Problem????  

Dass das neue gnome mit gvm und der integration von udev, dbus und hal etwas mitbringt was on the fly in config dateien rumfriemelt und somit ein bischen größere Sorgfalt erfodert als die bloße Einführungen eine neuen coolen panel appletts scheinen viele nicht zu begreifen. Schwer scheint es auch die Einsicht zu fallen, dass gentoo in mancher Hinsicht sehr viel komplizierter ist als Fedora oder Ubuntu. Wenn Ubuntu auf udev setzt, dann benutzen alle, die Ubuntu benutzen automatisch udev, dass ist bei gentoo nunmal einfach nicht der Fall.

Und was bitte soll darin schlimm sein, dass die sourcen dev-sourcen heißen? Von mir könnten sie Schnuddelhup heißen, hauptsache sie sind aktuell und funktionieren.

P.S.: So, genug beschwert, deshalb danke an Fibbs für das script. Sehr nützlich sowas.

----------

## Inte

 *ralph wrote:*   

>  *sven-tek wrote:*   mir scheint in der hinsicht der portage auch etwas pflegebedürftig, auch das der kernel 2.6 immernoch als -dev gehandelt wird ist nicht schön. Und was bitte soll darin schlimm sein, dass die sourcen dev-sourcen heißen? Von mir könnten sie Schnuddelhup heißen, hauptsache sie sind aktuell und funktionieren.

 

In einem der letzten GWNs wurde mal auf die Problematik der "für einige irreführenden" Benennung eingegangen. Auf die schnelle hab ich nur folgenden Link gefunden: development-sources are not 'development'

Gruß, Inte.

----------

## AlArenal

 *ralph wrote:*   

> 
> 
> Und was bitte soll darin schlimm sein, dass die sourcen dev-sourcen heißen? Von mir könnten sie Schnuddelhup heißen, hauptsache sie sind aktuell und funktionieren.
> 
> 

 

Für diesen Fall muss ich hier mal widersprechen. Sonst könnten wir den Kernel auch Egon und gnome klaus-dieter nennen - übersichtlicher wird davon nun wirklich nicht.

Nicht jeder ist ein Geek und nicht jeder will einer werden um sein System ans Laufen zu bringen / am Laufen zu halten - und das sollte uch nicht nötig sein (auch wenn die hardliner sowas nicht gerne hören).

In jedem anderen Projekt bedeutet "dev" nunmal soviel  wie "nicht ausreichend getestet und potenziell instabil oder gar gefährlich (Datenverlust)". Ausnahmen zur Regel helfen nicht beim Verständnis. Wer mal Französisch gelernt hat / versucht hat zu lernen, weiß was ich meine  :Wink: 

----------

## sven-tek

Inte, ich kann deinen Link nicht öffnen  :Sad:  was soll dev denn dann bedeuten? schließlich gibt es ja auch den vanilla kernel der dann development-sources heißt. da ist es der gleiche unsinn.

 :Arrow:  zum Thema warum ist es immernoch gentoo-dev-sources

Ich bin immernoch der Meinung das die Dateien in _einen_ Ordner gehören, beim Wechsel von

2.2 auf 2.4 ging das ja auch. so sollte es auch gehen oder:

```
# ls /usr/portage/sys-kernel/gentoo-sources/

ChangeLog

files

gentoo-sources-2.6.1-r2.ebuild

gentoo-sources-2.6.8-r9.ebuild

gentoo-sources-2.6.9-r3.ebuild

gentoo-sources-2.4.20-r26.ebuild

gentoo-sources-2.4.22-r17.ebuild

gentoo-sources-2.4.25-r10.ebuild

gentoo-sources-2.4.26-r10.ebuild

gentoo-sources-2.4.27-r2.ebuild

liste.txt

Manifest

metadata.xml

```

 :Arrow:  back to Topic, AbhängigkeitenAuflöseSkript-Notwendigkeit_trotz_portage

ich finde Fibbs Skript auch gut und denke aber Portage sollte genau dazu selber in der Lage sein. Zum Beispiel indem ich dem emerge eine option -forcemasked oder -forcekeyed mitgebe.

Die Berechnung des Deptree's sollte nicht immer von vorne angefangen werden, die portage-tools werden sowieso schon immer langsamer.

(Hat mal einer Lust die in C zu programmieren?)

----------

## sven-tek

Hi, ich habe fibbs script gerade mal in benutzung und einen kleinen Fehler behoben ( ~keyword zu keyword ersetzt )

wobei es noch eine Sache gibt die mir nicht so gefällt (TODO) es werden Einträge mit ">=" in die packages.keywords geschrieben. Das bedeutet ja das beim nächsten update diese Pakete immer auf den hächsten ~x86 stand gebracht werden, was nicht so günstig ist.

Ein "=footype/foo-0.123-r0 ~x86" würde reichen.

```
#!/bin/bash

MASKING_READY="0"

while [ "$MASKING_READY" == "0" ]; do

        emerge -pv $1 > /tmp/emerge

        PACKAGE=`grep 'have been masked' /tmp/emerge | sed 's/.*satisfy\ \"//' | sed 's/\".*//'`

        if [ "${PACKAGE}" ]; then

                echo "The following Package is masked: ${PACKAGE}."

                SHORTPACKAGE=`echo ${PACKAGE} | sed 's/.*\///'`

                MASKSTRING=`grep 'masked by:' /tmp/emerge | grep ${SHORTPACKAGE}`

                if ! [ "${MASKSTRING}" ]; then

                        MASKSTRING=`grep 'masked by:' /tmp/emerge | tail -n 1`

                fi

                echo "Mask: $MASKSTRING"

                KEYWORDS=`echo ${MASKSTRING} | grep 'keyword'`

                MASK=`echo ${MASKSTRING} | grep 'package.mask'`

                if [ "$KEYWORDS" ]; then

                        echo "Adding ${PACKAGE} to package.keywords"

                        echo "${PACKAGE} ~x86" >> /etc/portage/package.keywords

                fi

                if [ "$MASK" ]; then

                        echo "Adding ${PACKAGE} to package.unmask"

                        echo "${PACKAGE}" >> /etc/portage/package.unmask

                fi

                MASKING_READY="0"

        else

                echo "Fertig!"

                MASKING_READY="1"

        fi

done

```

----------

## sven-tek

[update] Das Script schreibt nun erstmal Versions-spezifische Pakete in .keywords bzw. unmask, mit =foo-type/foo-version ~x86

nur wenn das nicht geholfen hat, wird das paket _nochmal_ mit  >=foo-type/foo-version ~x86

eingetragen, es werden also *alle* höheren Versionen unmaskiert und man sollte bei diesen Prüfen ob man das will.

 :Arrow:  emerge_AcceptKeywords.sh

```

#!/bin/bash

OPERATOR="="

MASKING_READY="0"

while [ "$MASKING_READY" == "0" ]; do

        emerge -pv $1 > /tmp/emerge

        PACKAGE=`grep 'have been masked' /tmp/emerge | sed 's/.*satisfy\ \"//' | sed 's/\".*//'`

        if [ "${PACKAGE}" ]; then

                echo ">>> The following Package is masked: ${PACKAGE}."

                SHORTPACKAGE=`echo ${PACKAGE} | sed 's/.*\///'`

                MASKSTRING=`grep 'masked by:' /tmp/emerge | grep ${SHORTPACKAGE}`

                if ! [ "${MASKSTRING}" ]; then

                        MASKSTRING=`grep 'masked by:' /tmp/emerge | tail -n 1`

                fi

                MASKBYSTRING="`echo $MASKSTRING|sed -e 's/.*(\(.*\)).*/\1/g'`"

                echo -n "... $MASKBYSTRING "

                KEYWORDS=`echo ${MASKSTRING} | grep 'keyword'`

                MASK=`echo ${MASKSTRING} | grep 'package.mask'`

                PACKAGE="`echo ${PACKAGE}|sed -e 's/[>=][>=]\(.*\)/\1/g'`"

                if [ "$LASTPACKAGE" = "$PACKAGE" ]; then

                        OPERATOR=">="  # we looped the same package, try unmasking in all greater versions

                fi

                if [ "$KEYWORDS" ]; then

                        echo ", adding $OPERATOR${PACKAGE} to package.keywords"

                        echo "$OPERATOR${PACKAGE} ~x86" >> /etc/portage/package.keywords

                fi

                if [ "$MASK" ]; then

                        echo ", adding $OPERATOR${PACKAGE} to package.unmask"

                        echo "$OPERATOR${PACKAGE}" >> /etc/portage/package.unmask

                fi

                OPERATOR="="

                # fill a variable so we can check if we are looping the same package

                LASTPACKAGE=$PACKAGE

                MASKING_READY="0"

        else

                echo "Fertig!"

                MASKING_READY="1"

        fi

done

```

Das Script emerge_AcceptKeywords.sh irgendwo speichern und mit chmod u+x emerge_AcceptKeywords.sh ausführbar machen.

Ich habe den Ordner in dem das Script liegt auch der PATH Variable hinzugefügt und dann kann man z.B. mit

```
emerge_AcceptKeywords.sh world
```

die maskierten Pakete eintragen lassen. Anschließend kanns dann mit emerge -a world (oder statt world was ihr vorhabt)  losgehen.

Übrigends bleibt das ganze imho ein trauriger Workaround für fehlende Funktionalität in den echten Portage-Tools.

Gruss, Sven-Tek

----------

## sven-tek

mit der kleinen Änderung:

26c26

<                 PACKAGE="`echo ${PACKAGE}|sed -e 's/[>=][>=]\(.*\)/\1/g'`"

---

>                 PACKAGE="`echo ${PACKAGE}|sed -e 's/[>=]*\(.*\)/\1/g'`"

funktionierte nun auch sowas:

emerge_acceptKeywords.sh =gnome-base/gnome-2.8.2

emerge_AcceptKeywords.sh

----------

## sven-tek

kleine Änderung,

bei manchen Paketen begannen die Einträge in /etc/portage/package.keywords mit dem Zeichen ~ ,was dazu führte das das Script nicht von alleine abbricht. Sollte nun funktionieren.

emerge_AcceptKeywords

10c10

<         PACKAGE=`grep 'have been masked' /tmp/emerge | sed 's/.*satisfy\ \"//' | sed 's/\".*//'`---

>         PACKAGE=`grep 'have been masked' /tmp/emerge | sed 's/.*satisfy\ \"[~]*//' | sed 's/\".*//'`

----------

## _hephaistos_

earthwings hat mal so ein script geschrieben. "epo" genannt: https://forums.gentoo.org/viewtopic-t-215473.html

cheers

----------

## sven-tek

cool dann gibts nu zwei, manchmal denke ich wir bräuchten ne Forums-Zeitung - so als Mailingliste

... so wie ich das sehe ist sein Scipt auch sehr durchdacht und schön gemacht, aber wenn man größere Sachen mit dutzenden maskierten deps hat ist man mit diesem script hier schneller fertig da nicht jedes einzeln abgefragt wird.

Bei einzelnen Paketen die maskiert sind find ich die Idee emerge.log zu benutzen allerdings sehr cool.

----------

