Arbeiten mit maskierten Paketen
Aus Gentoo Linux Wiki
| 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}}
