Arbeiten mit maskierten Paketen

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

Dieser Artikel soll Euch den den richtigen Umgang mit maskierten Paketen erläutern. Ein maskiertes Paket ist eines, welches von Portage blockiert wird, weil es noch nicht getestet wurde oder instabil ist.

Inhaltsverzeichnis

[Bearbeiten] Beispiel eines maskierten Paketes

Code: Beispiel: Maskiertes Paket
 # 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.

An diesem Beispiel kann man sehen, dass das Paket gnome-extra/gdesklets-core maskiert ist und nicht über Portage installiert werden kann.

Falls die Ausgabe folgendermaßen aussieht "- app-cdr/cddump-0.7 (masked by: package.mask)" fahre in Sektion "Mergen von hard-maskierten Paketen" fort.

[Bearbeiten] Wie installiere ich maskierte Pakete trotzdem...?

Während die meisten Leute das benutzen:

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

Lies diesen Post warum ACCEPT_KEYWORDS nicht die beste Lösung ist: Weil emerge -u world jedesmal versuchen wird, die Pakete wieder auf die letzte stabile Version zu mergen, da diese noch maskiert sind. Das kann fatale Folgen haben und ist deshalb nicht empfehlenswert. Das -U flag (upgrade only) wird in künftigen Portage-Versionen verschwinden. (Aus gutem Grund: Da es emerge nicht downgraden kann, wenn ein Paket kaputt ist und -U dieses Verhalten verbietet)

[Bearbeiten] Die richtige Methode maskierte Pakete zu mergen

Die beste Methode ist, eine Datei namens /etc/portage/package.keywords anzulegen und in diese die Namen eurer masked Pakete mit einem Tag ~arch (z.B ~x86) einzutragen. Das Tag teilt Portage mit, dass ihr wisst, dass das Paket maskiert ist aber es dennoch haben wollt.

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

Stellt bitte sicher, dass das Verzeichnis /etc/portage existiert! Falls das nicht der Fall ist, erstellt es einfach, sonst kann die Datei (package.keywords) nicht erstellt werden. Wie ihr sicher festgestellt habt wurde ein ">>" benutzt um die Zeile in die Datei zu schreiben. Das wird benutzt um Zeilen anzuhängen. ACHTUNG: vergesst ihr das zweite '>' wird die Datei komplett mit der letzten Zeile überschrieben!

Mehr Informationen findet ihr hier.

[Bearbeiten] Ein Beispiel - Wie man es möglichst nicht machen sollte

Anstatt eine Datei package.keywords zu erstellen, könnte man auch einfach /usr/portage/profiles/package.mask bearbeiten und die Zeile, die das gewünschte Paket maskiert, mit einem '#' auskommentieren.

Datei: Auskommentieren in /usr/portage/profiles/package.mask
Zeile vorher:
 gnome-extra/gdesklets-core
Zeile nacher:
 # gnome-extra/gdesklets-core


emerge gnome-extra/gdesklets-core

Diese Vorgehensweise ist deshalb nicht empfehlenswert, da beim nächsten emerge sync die package.mask wieder überschrieben wird und dadurch das Paket erneut maskiert ist.

[Bearbeiten] Meine Lösung

Ich habe ein kleines Skript (namens gimme) erstellt, was vielleicht nützlich zum Mergen von maskierten Paketen ist:

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


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

source /sbin/functions.sh

[ "$UID" -ne "0" ] && error "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 "Creaing /etc/portage directory"
                       mkdir /etc/portage)

# Here is the new code
if [ -z "$2" ]; then # If $2 empty? If yes then
     set $1 $1       # save $1
     set $2 "x86"    # set $2 = x86
                     # If $2 not empty use $2
fi

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

Kopiere das Script in deinen Path.

cp gimme /usr/bin/ && chmod 555 /usr/bin/gimme

Nun kannst du das Script benutzen....einfach folgendes eingeben:

gimme gnome-extra/gdesklets-core

Beim alternativen Script kann man zusätzlich die Architektur eingeben:

gimme gnome-extra/gdesklets-core amd64

Standartmäßig ist die Architektur x86 gesetzt. Hinweis: Momentan wird nicht überprüft ob die Architektur existiert!

[Bearbeiten] Mergen von hard-maskierten Paketen

Ist ein Ebuild als Keyword ~x86 (oder als jede andere Architektur) markiert, so ist es relativ neu oder experimentell. Sollte ein Ebuild -x86 (und auch bei jeder anderen Architektur) sein, dann ist bekannt, dass es nicht funktioniert. Was ist aber mit Paketen, die wegen Sicherheitsaspekten, experimentellem Status oder irgendetwas anderem entfernt wurden? Gründe, die dein System veranlassen, das Paket nicht zu installieren? In solchen Fällen kommt die Datei packages.mask ins Spiel, mit der es leicht ist gegebene Einstellungen zu überschreiben.

Für dieses Beispiel benutzen wir das eclipse-3-Ebuild, speziell eclipse-sdk-3_rc3.

Code: Beispiel ein hard-maskiertes Paket zu installieren
[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 ihr seht ist das eclipse-3-Paket maskiert. Wenn ihr die Maskierung des Pakets nun überschreiben möchtet, muss das Portage mitgeteilt werden, und zwar über die Datei /etc/portage/package.unmask. Als erstes wird herausgefunden, was entmaskiert werden soll:

Code: Beispiel ein hard-maskiertes Paket zu installieren
[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


Da nun bekannt ist welche Pakete alle hard-maskiert sind, können wir die Zeilen per Copy&Paste in die package.unmask kopieren: (Ich habe auch andere Pakete demaskiert.)

Code: Beispiel ein hard-maskiertes Paket zu installieren
[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ß. :)

[Bearbeiten] Zusätzliche Hinweise, Problemlösungen

[Bearbeiten] Operatoren

Einen Operator (=, >, <, <=, =>) verwendet man nur, wenn die Versionsnummern relevant sind.

[Bearbeiten] Wie komme ich zum richtigen Eintrag

Erfolgt eine Meldung wie: "Invalid atom in /etc/portage/package.keywords: media-video/nvidia-kernel-1.0.8756" stimmt etwas mit der Zeile in der package.kewords nicht. Im obigen Fall fehlt einfach ein "=" vor dem Eintrag (siehe Operatoren)). Man kann den richtigen Eintrag für die package.kewords sehr leicht herausbekommen, wenn man erst einmal einen manuellen emerge probiert:

emerge -p nvidia-kernel-1.0.8756
These are the packages that I would merge, in order:
Calculating dependencies
!!! 'nvidia-kernel-1.0.8756' is not a valid package atom.
!!! Please check ebuild(5) for full details.
!!! (Did you specify a version but forget to prefix with '='?)

Folgt man dem Vorschlag ein "=" voranzustellen, ist man schon einen Schritt weiter:

emerge -p =nvidia-kernel-1.0.8756
These are the packages that I would merge, in order:
Calculating dependencies
!!! All ebuilds that could satisfy "=nvidia-kernel-1.0.8756" have been masked.
!!! One of the following masked packages is required to complete your request:
- media-video/nvidia-kernel-1.0.8756 (masked by: ~x86 keyword)
For more information, see MASKED PACKAGES section in the emerge man page or
refer to the Gentoo Handbook.

Jetzt noch das Keywort hinzu und man bekommt eine saubere Anzeige:

ACCEPT_KEYWORDS="~x86" emerge -p =nvidia-kernel-1.0.8756
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild   R   ] media-video/nvidia-kernel-1.0.8756

Die Zeile in der package.keywords muss also jetzt lauten:

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

Testen kann man die Richtigkeit nun, indem man die Angabe der Version weglässt:

emerge -p nvidia-kernel
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild   R   ] media-video/nvidia-kernel-1.0.8756

[Bearbeiten] Andere Keywords

Wenn die Meldung "masked by -*" kommt, muss man auch dieses Keyword angeben, also zum Beispiel:

echo "=gnome-extra/gdesklets-core ~x86 -*" >> /etc/portage/package.keywords}}

'Persönliche Werkzeuge