Masked

Uit Gentoo Linux Wiki

Ga naar: navigatie, zoeken
Dit artikel is onderdeel van de Tips & Trucs serie.
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

Afkomstig van de Nederlandstalige Gentoo Wiki, het vrije Gentoo handboek. "http://nl.gentoo-wiki.com/Masked"
Persoonlijke instellingen