Masked

Aus Gentoo Linux Wiki

Wechseln zu: Navigation, Suche
Dieser Artikel ist Teil der TIPPs & Tricks Sammlung.
Terminals / Shells X Portage System Dateisysteme Kernel Netzwerk Sonstiges alphabetischer Tipp Index

Inhaltsverzeichnis

[Bearbeiten] Einführung

Dieser Artikel beschreibt den richtigen Umgang mit maskierten Paketen. Ein maskiertes Paket ist ein Paket, welches durch Portage blockiert wird. Üblicherweise werden unstable/tested- Pakete blockiert. Generell bedeutet das soviel, wie "Dieses Paket muss getestet werden". Pakete, die Hard Masked sind, sind in der Regel Instabil.

[Bearbeiten] Beispiel eines maskierten Paketes

Code: Masked Package Example
 # emerge gnome-extra/gdesklets-core

  Calculating dependencies   
  !!! all ebuilds that could satisfy "gnome-extra/gdesklets-core" have been masked.
  !!! possible candidates are:
  - gnome-extra/gdesklets-core-0.26 (masked by: ~keyword)
  - gnome-extra/gdesklets-core-0.26.1 (masked by: ~keyword)
  !!! Error calculating dependencies. Please correct.


In diesem Beispiel kann man sehen, dass das Paket "gnome-extra/gdesklets-core" maskiert ist, und somit nicht installiert werden kann.

Wenn Sie etwas in der Art von "- app-cdr/cddump-0.7 (masked by: package.mask)" lesen, dann können Sie zum Abschnitt "Hart-maskierte Pakete installieren" wechseln.

[Bearbeiten] Wie man trotzdem unstable-Pakete installiert

So macht man es nicht:

Viele Gentoo-User installieren maskierte Pakete mit ACCEPT_KEYWORDS:

ACCEPT_KEYWORDS="~x86" emerge gnome-extra/gdesklets-core

In diesem Posting kann man nachlesen, warum ACCEPT_KEYWORDS nicht der beste Weg ist, ein maskiertes Paket zu installieren: emerge -u world wird versuchen, das entsprechende Paket durch die stable Version zu ersetzen. Dadurch können abhängige Pakete in Mitleidenschaft gezogen werden. Das -U Flag (upgrade only) ist veraltet (deprecated), und das aus gutem Grund! - Ist ein Paket nicht lauffähig, wird Portage versuchen, es durch eine stabile Version zu ersetzen. Das -U Flag wird dieses Vorhaben jedoch verhindern.

[Bearbeiten] Der "saubere" Weg

Die aktuelle Portage-version unterstützt das saubere Handling maskierter Pakete. Dazu wird das masked Paket in die Datei /etc/portage/package.keywords eingetragen. (Das ~x86 flag teilt Portage ausdrücklich mit, dass Sie das Paket installieren möchten, obwohl das Paket maskiert ist.)

 # mkdir -p /etc/portage
 # echo "gnome-extra/gdesklets-core ~x86" >> /etc/portage/package.keywords
 # emerge gnome-extra/gdesklets-core

Vergewissern Sie sich, dass /etc/portage existiert, wenn nicht, erstellen Sie es. Wenn dieses Verzeichnis nicht existiert, kann die Datei auch nicht angelegt werden. Es ist wichtig, ">>" in der echo-zeile zu verwenden. ">>" bewirkt, dass der Eintrag an das Ende der Datei angefügt wird. Ein ">" würde stattdessen die Datei mit dem angegebenen Paket überschreiben, und alle vorherigen Eintragungen löschen. Die Datei package.keywords muss nicht explizit angelegt werden. Die Datei wird, sofern sie nicht existiert, automatisch angelegt, sobald echo "package ~x86" >> /etc/portage/package.keywords ausgeführt wird.

[Bearbeiten] Ein weiterer Weg, den man *nicht* gehen sollte

Anstelle einen Eintrag /etc/portage/package.keywords zu schreiben, kann man auch /usr/portage/profiles/package.mask editieren, um das maskierte Paket mit einer Raute (#) auszukommentieren.

# nano -w /usr/portage/profiles/package.mask
Vorher:
 gnome-extra/gdesklets-core
Nachher:
 # gnome-extra/gdesklets-core
 # emerge {program of choice}

Anmerkung: Jede Änderung an der datei /usr/portage/profiles/package.mask wird durch ein "emerge sync" gelöscht.

[Bearbeiten] Der intelligente Weg

Mit diesem Script ist das Handling maskierter Pakete besonders einfach

Datei: gimme
  ####################################################
  # Script to add package names to package.keywords. #
  # Originally by Tekmanx, re-written by Hackeron    #
  ####################################################

  source /sbin/functions.sh

  [ "$UID" -ne "0" ] && eerror "Must be root to run this script." && 
			exit

  [ -z "$1" ] && eerror "Please state a package name (eg. gimme <package-name>)" &&
		 exit

  [ -d /etc/portage ] || (einfo "Creating /etc/portage directory"
		          mkdir /etc/portage )

  if [ "$(grep "^$1 ~x86$" /etc/portage/package.keywords)" ]; then
	ewarn "$1 already exists in package.keywords"
  else
	einfo Adding $1 to package.keywords and emerging in 5 seconds.
	sleep 5
	echo $1 ~x86 >> /etc/portage/package.keywords
	emerge $1
  fi


Kopieren Sie dieses Script nach /usr/bin.

# cp gimme /usr/bin/
# chmod 555 /usr/bin/gimme

Nun können Sie dieses Script benutzen.. Einfach am Prompt folgendes Kommando eintippen:

# gimme gnome-extra/gdesklets-core

[Bearbeiten] Installieren hart maskierter Pakete

Wenn ein Paket ein ~x86 keyword hat, dann ist dieses Paket entweder sehr neu oder hat experimentellen Status. Ein Paket mit -x86 ist als nicht lauffähig markiert. Was macht man aber mit experimentellen Paketen, die sich aus Sicherheits- oder anderen Gründen nicht installieren lassen? Diese Pakete sind in der Datei packages.mask vermerkt. Es ist recht einfach, diese Einstellung zu überschreiben.

Als Beispiel benutzen wir das eclipse-3 ebuild, wir wollen eclipse-sdk-3_rc3 benutzen.

Code: Beispiel für hard-masked Pakete
[12:14][pts/0][joe@Athena ~] % sudo emerge -vp ">=eclipse-sdk-3_rc3"

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

Calculating dependencies   
!!! all ebuilds that could satisfy ">=eclipse-sdk-3_rc3" have been masked.
!!! possible candidates are:
- dev-util/eclipse-sdk-3.0.0_rc3 (masked by: package.mask)
# <karltk@gentoo.org> (10 Jun 2004)
# 3.0 is nearing release upstream, we seem to be in good shape,
# but it need some more build testing before it's unmasked.


Wie Sie sehen können, ist eclipse 3 hard-masked. Wenn sie diese Sperre überschreiben möchten, ist es notwendig, Portage dies mitzuteilen. Dazu dient die Datei /etc/portage/package.unmask.

Zunächst müssen wir herausfinden, was zu demaskieren ist:

Code: Beispiel für das mergen hart-maskierter Pakete
[12:18][pts/0][joe@Athena ~] % grep 'eclipse' /usr/portage/profiles/package.mask 
>=dev-util/eclipse-sdk-2.9
dev-util/eclipse-cbg-editor
dev-util/eclipse-emf-bin
dev-util/eclipse-ve-bin
dev-util/eclipse-gef-bin
>=dev-util/eclipse-sdk-bin-1.0


Nun wissen wir genau, welche Pakete hart maskiert sind. Wir können das Paket direkt in package.unmask kopieren

Code: Example of emerging hard-masked package
[12:16][pts/0][joe@Athena ~] % cat /etc/portage/package.unmask 
>=dev-util/eclipse-sdk-2.9
>net-www/mozilla-1.6-r1
>=sys-apps/portage-2.0.51_pre1
dev-util/eclipse-emf-bin
dev-util/eclipse-gef-bin
dev-util/eclipse-ve-bin
[12:17][pts/0][joe@Athena ~] % sudo emerge -vp ">=eclipse-sdk-3_rc3"

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

Calculating dependencies ...done!
[ebuild   R   ] dev-util/eclipse-sdk-3.0.0_rc3  +gnome +gtk +jikes +kde -motif +mozilla 51,675 kB 

Total size of downloads: 51,675 kB


Viel Spaß. :)

'Persönliche Werkzeuge
Andere Sprachen