# portage spinnt - package.mask wird ignoriert

## schachti

```

segfault ~ # cat /etc/portage/package.mask

=x11-drivers/nvidia-drivers-173.08

~sys-kernel/linux-headers-2.6.25

segfault ~ # emerge -Dup world

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild  NS   ] sys-kernel/hardened-sources-2.6.24-r2 [2.6.24-r1] USE="symlink -build"

[ebuild     U ] x11-drivers/nvidia-drivers-173.08 [169.12]

```

Hat jemand eine Erklärung dafür?

edit: Sorry, war zu schnell - ein Blick auf /etc/portage/package.unmask hat das "Problem" geklärt. Gibt es eine Möglichkeit, in /etc/portage/package.unmask etwas zu demaskieren, aber eine bestimmte Version davon auszunehmen?

----------

## firefly

naja in dem du die entsprechende version aussparst beim unmasken

<x11-drivers/nvidia-drivers-173.08

>x11-drivers/nvidia-drivers-173.08

----------

## schachti

ok, mit genau einer Version geht das noch - wenn ich aber zum Beispiel Versionen 1-10 habe und genau Versionen 3 und 8 maskieren möchte, geht es so nicht mehr. Wobei das zugegebenermaßen eher theoretisch ist, da man in der Regel ja die jeweils neuste nicht-maskierte Version installieren will und daher einfach alle älteren maskieren kann.   :Wink: 

----------

## Kess

 *Quote:*   

> wenn ich aber zum Beispiel Versionen 1-10 habe und genau Versionen 3 und 8 maskieren möchte

 

... dann trägst du die versionen 3 und 8 mit '=' in die package.mask und nichts in die package.umask ein.

----------

## ChrisJumper

 *schachti wrote:*   

> ok, mit genau einer Version geht das noch - wenn ich aber zum Beispiel Versionen 1-10 habe und genau Versionen 3 und 8 maskieren möchte, geht es so nicht mehr. Wobei das zugegebenermaßen eher theoretisch ist, da man in der Regel ja die jeweils neuste nicht-maskierte Version installieren will und daher einfach alle älteren maskieren kann.  :wink:

 

Ich versteh dein Problem sowieso nicht wenn du doch nur eine Version installieren kannst ist das doch egal! ;)

Da reicht es dann alle zu Maskieren.. und nur die eine die die installiert haben möchtest z.B. zu unmask-en. Oder alle Versionen drüber.. wie in dem Beispiel von firefly alle neueren Versionen darüber zu maskieren. Es geht dir doch nur um ein "unerwünschtes" Automatisches Update oder nicht?

----------

## schachti

Das automatische Update möchte ich gar nicht verhindern - das Problem ist, dass öfter mal neue Versionen hard masked in den Tree kommen und ich sie gleich benutzen möchte, auf der anderen Seite aber mehrere Versionen bei mir nicht ordentlich laufen, so dass ich diese nicht haben will. Ich will also prinzipiell erstmal alles erlauben (weil es in den meisten Fällen klappt) und nur in den wenigen Fällen, in denen es nicht klappt, manuell eingreifen müssen und maskieren. Meiner Meinung nach der schönste Ansatz wäre, prinzipiell erstmal alle Versionen zu demaskieren und dann die, die man nicht will, wieder zu maskieren. Da aber scheinbar package.unmask eine höhere Priorität als package.mask hat, geht es mit diesem schönen intuitiven Ansatz nicht.

Der Tipp von Firefly hat den Nachteil, dass man damit nur genau eine Version aussparen kann beim unmasken. Der Tipp von Kess funktioniert insofern nicht, als dass viele neue Versionen erstmal maskiert sind - dann müsste ich bei jeder neuen Version genau die Version erstmal demaskieren.

Klar, auf jeden Fall kann man es so lösen, dass man explizit die Versionen, die brauchbar sind, in package.unmask einträgt und die, die man nicht will, in package.mask - aber dann muß man bei jeder neuen Version mindestens einmal tätig werden (hinzufügen zu package.unmask), wenn man die Version nach dem Testen nicht will sogar dreimal (aus package.unmask wieder entfernen und zu package.mask hinzufügen).

Wenn man allerdings portage sagen könnte, dass es erst package.unmask und dann package.mask berücksichtigen soll, müßte man nur dann etwas tun, wenn es eine neue Version gibt, die man nicht will. Also so ähnlich wie order unmask, mask anstatt order mask, unmask.   :Wink:  Ist zwar in meinem Beispiel auch mit Handarbeit zu erreichen, aber schöner wäre es schon, wenn man dieses Verhalten beeinflussen könnte.

----------

## firefly

?? wiso nur eine version??

so geht es auch mit 2 oder mehreren versionen, solange du nicht eine Version dazwischen haben möchtest

<x11-drivers/nvidia-drivers-171.06

>x11-drivers/nvidia-drivers-173.08

----------

## Kess

Fireflys Vorschlag geht natürlich auch mit mehreren Versionen und einer unzutreffenden dazwischen. du mußt einfach mehrere Bereiche definieren in der Art: 

#versionen 3-5

<=version 3

>=version 5

# version 6 ist nicht inbegriffen

# aber Versioenn 7-9 wieder

<=version 7

>=version 9

Schließlich gibt es neben '<' und '>' ja auch noch '>=' und '>=' ;-)

Unabhängig davon, gehe ich davon aus, dass du nicht ernsthaft von Hard masked sondern von masked by keyword sprichst. Echtes hard masked hat in der Regel einen sehr triftigen Grund, den du nur in absoluten Ausnahmefällen ignorieren willst. 

Neuere Treiber sind üblicherweise erst Keyword-maskiert. Wenn du prinzipiell unstable fahren willst, kannst du einfach in die package.keywords eintragen:

x11-drivers/nvidia-drivers   ~x86

oder statt ~x86 hlat ~amd64 oder was immer bei dir zurtrifft.

Und in package.mask trägst du dann die Versionen ein, die nicht funktionieren.

----------

## schachti

 *Kess wrote:*   

> Fireflys Vorschlag geht natürlich auch mit mehreren Versionen und einer unzutreffenden dazwischen.

 

Ich denke nein, Dein Beispiel dürfte nicht funktionieren. Angenommen, ich habe Version 1 bis 10 und möchte alle außer 3 und 7 demaskieren:

<3

>3

<7

>7

Das <7 trifft aber auch auf 3 zu, was nicht gewollt ist.

 *Kess wrote:*   

> 
> 
> Unabhängig davon, gehe ich davon aus, dass du nicht ernsthaft von Hard masked sondern von masked by keyword sprichst
> 
> 

 

Doch, genau das ist gemeint. Ich fahre ein ~x86 System und will ab und an Pakete nutzen, von denen bestimmte Versionen noch hart maskiert sind. Gerade bei den Nvidia-Treibern war das vor ein paar Monaten so, dass die aktuelle Version hard masked war.

----------

## Genone

Ist vielleicht nicht elegant, aber man kann durchaus package.keywords dafür zweckentfremden. Normalerweise benutzt man die datei zwar, um die Sichtbarkeit von Paketen zu erweitern, man kann sie aber auch einschränken, in deinem Fall z.B. könntest du x11-drivers/nvidia-drivers komplett via package.unmask sichtbar machen, und die unerwünschten Versionen dann via package.keywords ausblenden:

```
~x11-drivers/nvidia-drivers-173.01 -*

~x11-drivers/nvidia-drivers-173.02 -*

~x11-drivers/nvidia-drivers-173.03 -*
```

(und ja, -* ist normalerweise komplett falsch, aber nur weil es in älteren Portage-Versionen eine komplett andere (falsche) Bedeutung hatte. Man könnte genauso explzit sämtliche ACCEPT_KEYWORDS Einträge negieren, ist halt blos etwas mehr Aufwand und abhängig vom aktuellen Profil)

----------

## schachti

Cool, das ist ziemlich genau das, was ich mir (ursprünglich mit package.mask) vorgestellt habe!   :Cool: 

Besten Dank!

----------

