טיפול בחבילות ממוסכות

מתוך הויקי של ג'נטו.

קפיצה אל: ניווט, חיפוש
מאמר זה הינו חלק מסדרת טיפים וטריקים
מסופים / Shellים X Windows Portage ניהול מערכת מערכות קבצים קרנל שונות

תוכן העניינים

[עריכה] הקדמה

מאמר זה יראה לך את הדרך הנכונה להתקין חבילות ממוסכות באמצעות ‎emerge. חבילה ממוסכת היא חבילה שנחסמה לשימוש על ידי portage. חבילות בדרך כלל נחסמות על ידי portage משום שהן אינן בדוקות או אינן יציבות. חבילה "ממוסכת" (masked) בדרך כלל אומרת שהיא צריכה עדיין בדיקה, בעוד שחבילה "ממוסכת באופן קשיח" היא חבילה שידוע שהיא אינה יציבה.

[עריכה] כיצד אדע אם חבילה ממוסכת או ממוסכת "באופן קשיח"?

קודם כל, ממוסכת על ידי מילת מפתח כחבילה שנמצאת בבדיקה/לא יציבה:

שים לב ל - ‎masked by: ~keyword

קוד: דוגמא לחבילה ממוסכת על ידי מילת מפתח
 # 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.

לאחר מכן, חבילה ממוסכת באופן "קשיח" (שים לב ל - ‎masked by: package.mask

קוד: דוגמא לחבילה ממוסכת באופן קשיח
# 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.

[עריכה] אבל אתה רוצה להתקין את החבילה למרות זאת...

[עריכה] חבילות ממוסכות

השיטה המסורתית הייתה:

קוד: ביטול מיסוך חבילה בשיטה הישנה
 ACCEPT_KEYWORDS="~x86" emerge gnome-extra/gdesklets-core

אבל שיטה זו אינה מומלצת כיום. קרא הודעה זו כדי לדעת מדוע ACCEPT_KEYWORDS אינו פתרון טוב... בעקרון הבעייה היא שברגע שתעשה emerge -u world, המערכת תנסה לבצע "שדרוג" לגירסא ישנה יותר לחבילות שהותקנו באמצעות ACCPET_KEYWORDS, וזה יכול, באופן פוטנציאלי, לגרום לשינויים הרסניים ולהרס המערכת שלך. הדגל ‎-U מונע התנהגות זו.

השיטה החדשה היא:

קוד: ביטול מיסוך חבילה בשיטה החדשה
 echo "=gnome-extra/gdesklets-core-2.10.9" >> /etc/portage/package.keywords

שים לב: אינך חייב לציין את הארכיטקטורה ב-‎package.keywords אלא אם כן אתה רוצה להשתמש בארכיטקטורה ששונה מהנוכחית שלך, דבר שאינו מומלץ.

אם emerge אומר שהחבילה מוסכה על ידי מילת המפתח ‎-*, תצטרך לקחת את זה כפי שזה נאמר במקור, ולהשתמש, לדוגמא ב:

קוד: ביטול מיסוך חבילה עם מילת מפתח מסויימת
 echo "=gnome-extra/gdesklets-core-2.10.9 -*" >> /etc/portage/package.keywords

עוד מידע בנושא ניתן למצוא במאמר package.keywords.

[עריכה] חבילות ממוסכות באופן קשיח

חבילות הממוסכות באופן קשיח ניתן להתקין על ידי הוספתן באופן פרטני לתוך הקובץ ‎/etc/portage/package.unmask. התחביר לקובץ זה, לעומת זאת, מעט שונה מהתחביר של הקובץ ‎package.keywords:

קוד: ביטול מיסוך של חבילה ממוסכת באופן קשיח
 echo "=app-admin/filewatcher-2.4.0" >> /etc/portage/package.unmask

פעולה זו תסיר את המיסוך של גירסא 2.4.0 של app-admin/filewatcher. אם אתה רוצה לבטל את המיסוך עבור כל גירסא אפשרית של החבילה, ציין רק את שם החבילה, כך:

קוד: ביטול מיסוך של חבילה ממוסכת באופן קשיח בלי תלות בגירסת החבילה
 echo "app-admin/filewatcher" >> /etc/portage/package.unmask

כמובן, אפשר להשתמש גם באופרטורים < ו- > כמו ב-package.keywords.

שים לב, שחבילה שמוסכה באופן קשיח, בדרך כלל ממוסכת כלא יציבה גם כן. ככל הנראה תצטרך להוסיף את החבילה ל-‎package.unmask וגם ל-‎package.keywords.

[עריכה] תסריט עבור etc/portage/package.keywords/

הנה דרך נוחה להתקנת תוכנות אשר מוסכו עם מילת המפתח ארכיטקטורה~

קוד: 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

שמור זאת בקובץ שנקרא "gimme" בספרייה ‎/usr/local/bin, ולאחר מכן, הרץ את הפקודה הבאה:

קוד: הוספת הרשאת הרצה לקובץ

chmod 755 /usr/local/bin/gimme

כעת, אתה מוכן להשתמש בתסריט.. לדוגמא:

קוד: הרצת gimme

gimme gdesklets-core

[עריכה] תסריט עבור etc/portage/package.unmask/

הנה דרך נוחה לבטל מיסוך של חבילה שמוסכה באופן קשיח על ידי ‎/usr/portage/profiles/package.mask

קוד: 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

שוב, שים את הקובץ "unmask" בספריה ‎/usr/local/bin ובצע:

קוד: הוספת הרשאת הרצה לקובץ

chmod 755 /usr/local/bin/unmask

כעת אתה מוכן להשתמש בתסריט.. לדוגמא:

קוד: הרצת unmask
unmask kde-base/kode 

שים לב שגירסא זו של unmask דורשת את שם החבילה המלא, כולל ‎app-category/

אתה יכול לשלב את שני התסריטים יחד, לדוגמא:

קוד: הרצת unmask ו-gimme ביחד

unmask kde-base/kode && gimme kode

תהנה :)

[עריכה] ראה גם

כלים אישיים
שפות אחרות