Masked
Uit Gentoo Linux Wiki
| Terminals / Shells • Network • X Window System • Portage • System • Filesystems • Kernel • Other |
Inhoud |
[bewerken] Introductie
Dit artikel toont de correcte manier om met gemaskeerde pakketten om te gaan. Een gemaskeerd pakket is een pakket geblokkeerd door het portage systeem. Pakketten zijn normaal geblokkeerd door portage omdat ze ongetest/onstabiel (untested/unstable) zijn. Een masked pakket betekent een onstabiele ebuild die getest moet worden, een hard masked pakket daarintegen is een pakket waarvan het programma gekend is als onstabiel.
Uitzoeken of een pakket hard masked is of enkel untested/unstable
Eerst, masked door key-woord als een testing/unstable pakket: Let op de "{masked by: ~keyword)"
| Code: Masked door ~keyword Pakket Voorbeeld |
# 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. |
Ten tweede, een "Hard masked" pakket: Let op de "(masked by: package.mask)"
| Code: "Hard Masked" Pakket Voorbeeld |
# emerge -pv filewatcher These are the packages that I would merge, in order: Calculating dependencies !!! All ebuilds that could satisfy "filewatcher" have been masked. !!! One of the following masked packages is required to complete your request: - app-admin/filewatcher-2.4.0 (masked by: package.mask) # Elfyn McBratney <beu@gentoo.org> (28 Apr 2005) # Masked for testing. |
[bewerken] Maar je wilt het pakket hoe dan ook installeren...
[bewerken] "Masked" pakketten
De traditionele manier was:
ACCEPT_KEYWORDS="~x86" emerge gnome-extra/gdesklets-core
Maar dit wordt afgekeurd. Lees this post over waarom ACCEPT_KEYWORDS geen goede oplossing is... eigenlijk komt het er op neer omdat emerge -u world pakketten die geinstalleerd zijn met ACCEPT_KEYWORDS zal willen downgraden, en dit zou kunnen leiden tot fatale veranderen en je systeem kreupel maken. De -U flag (enkel upgraden) wordt ook afgekeurd voor een goede reden. Als een pakket gebroken is, dan zou portage het moeten downgraden. -U sluit dit uit. De nieuwe methode is:
echo "=gnome-extra/gdesklets-core-2.10.9" >> /etc/portage/package.keywords
NOTE: Het is niet nodig om de specifieke architectuur ("~x86") mee te geven in package.keywords BUITEN als je een architectuur wil gaan gebruiken die verschilt van de architectuur die in gebruik is, wat niet aan te raden is.
Als emerge laat weten dat het pakket gemasked is door "-* keyword", moet je dit letterlijk nemen en gebruiken, als voorbeeld:
echo "=gnome-extra/gdesklets-core-2.10.9 -*" >> /etc/portage/package.keywords
Meer info over dit bestand vind je hier
[bewerken] Hard Masked packages
Hard Masked packages worden ontmaskerd door ze toe te voegen aan /etc/portage/package.unmask. De syntax van dit bestand verschilt echter iets van package.keywords:
echo "=app-admin/filewatcher-2.4.0" >> /etc/portage/package.unmask
Dit zal versie 2.4.0 van app-admin/filewatcher ontmaskeren. Als je iedere versie van een package wilt ontmaskeren, moet je de naam als volgt schrijven:
echo "app-admin/filewatcher" >> /etc/portage/package.unmask
Natuurlijk is het ook mogelijk om de < en > operatoren te gebruiken zoals in package.keywords.
Let op dat een package dat hard gemaskeerd is, meestal ook als unstable gemarkeerd is. Waarschijnlijk zul je het package aan zowel package.unmask als package.keywords moeten toevoegen.
[bewerken] Script voor /etc/portage/package.keywords
Hier staat een handig script om ~arch keyworded packages te emergen.
| File: /usr/local/bin/gimme |
#!/bin/bash ############### gimme version 0.5.2a ############### # Script to add package names to package.keywords. # # Originally by Tekmanx, re-written by Hackeron # # re-re-written by Gherald # #################################################### source /sbin/functions.sh [[ $EUID != 0 ]] && ewarn "You are not root!" && exit 1 [ -z "$1" ] && eerror "Please specify a package name (eg. gimme <package-name>)" && exit 1 [ -d /etc/portage ] || mkdir /etc/portage #get fully-qualified ebuild name FQN=`ACCEPT_KEYWORDS="~x86" emerge -p $1 | grep "$1" | grep 'ebuild ' | tail -n 2 | head -n 1 | sed 's/\[ebuild.......\]\ //' | sed 's/\[[[:digit:]].*\]//' | sed 's/-[[:digit:]].*$//'` if [ -z $FQN ]; then # We think there is either none or more than one package matching $1 # so we let the user deal with it emerge $@ --ask ; exit fi EXISTING="$(grep "^ *[\>\<=]*$FQN *" /etc/portage/package.keywords)" if [ -n "$EXISTING" ]; then ewarn "/etc/portage/package.keywords already contains \"$EXISTING\"" emerge $@ --ask ; exit else einfo "Adding $FQN to package.keywords and emerging in 5 seconds."; sleep 5 echo $FQN >> /etc/portage/package.keywords emerge $@ --ask fi |
Sla dit bestand op als een file genaamd "gimme" in /usr/local/bin en doe: [Edit: omdat dit script als root gedraait wordt, moet het in /bin/ geplaatst worden.]
chmod 755 /usr/local/bin/gimme
Nu kun je het script gaan gebruiken. Bijvoorbeeld:
gimme gdesklets-core
[bewerken] Script voor /etc/portage/package.unmask
Hier staat een handig script dat package die hard gemaskeerd zijn in /usr/portage/profiles/package.mask kan ontmaskeren.
| File: /usr/local/bin/unmask |
#!/bin/bash
#
# This script will unmask any package masked by the actual profile.
#
# First we search for what is actually masked
# in /usr/portage/profiles/package.mask then add a corresponding
# line in /etc/portage/package.unmask
#
#
# Original by drax@sweon.net
source /sbin/functions.sh
[ "$UID" -ne "0" ] && eerror "You must be root to run this script." && exit
[ -z "$1" ] && eerror "Please state a package name (eg. unmask kde-base/kode)" && exit
[ ! -d /etc/portage ] && einfo "Creating /etc/portage directory" && mkdir /etc/portage
if [ "$(grep "$1"-[0-9] /etc/portage/package.unmask 2>/dev/null)" ]; then
ewarn "$1 already exists in package.unmask"
else
PKG_LINE="$(grep "$1"-[0-9] /usr/portage/profiles/package.mask 2>/dev/null)"
if [ ! $PKG_LINE ]; then
PKG_LINE="$(grep "$1" /usr/portage/profiles/package.mask 2>/dev/null)"
fi
if [ ! $PKG_LINE ]; then
ewarn "Could not find $1 in /usr/portage/profiles/package.mask" && exit 1
else
ebegin "Adding $1 to package.unmask"
echo $PKG_LINE >> /etc/portage/package.unmask
eend $?
fi
fi
|
Zet ook deze tekst in een file genaamd "unmask" in /usr/local/bin en doe: [Edit: omdat dit script gedraait wordt als root moet hij worden geplaatst in /bin/]
chmod 755 /usr/local/bin/unmask
Nu ben je klaar om het script te gaan gebruiken... bijvoorbeeld:
unmask kde-base/kode # deze versie van unmask heeft de volledige naam nodig van het package, inclusief app-category/
Je kunt het ook combineren met gimme, bijvoorbeeld:
unmask kde-base/kode && gimme kode
Veel plezier. :)
[bewerken] Zie Ook
Gentoo Linux/x86 Handbook: Mixing software Branches
How to use portage correctly
