כיצד להשתמש בפורטאג' נכון

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

קפיצה אל: ניווט, חיפוש

מדריך התקנה זה הוא תרגום של מדריך הויקי האנגלי בנושא.

תוכן המדריך מוגן בזכויות יוצרים של כותבי המדריך המקורי.

התרגום בוצע באישור הרשיון שבו פורסם המסמך המקורי, Creative Commons - Attribution / Share Alike.

על התרגום חלים אותם תנאי רשיון כמו למקור התוכן. המדריך תורגם על ידי oc666.

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

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

ישנם מספר אלמנטים עיקריים אשר מגדירים הפצת לינוקס. אחד מהחשובים ביותר הוא פילוסופיית ניהול חבילות או מערכת אשר ההפצה מאמצת אל לבה. לדוגמאלא יציבות., נוכל לקטלג הפצות שעוצבו סביב RPM כמו רדהט, או שנוכל לומר שאובונטו או קנופיקס מגיעות מדביאן, בגלל שהן משתמשות ב-APT. מנהל החבילות שנמצא בליבו של לינוקס ג'נטו ידוע כפורטאג' (Portage). הערת המתרגם: המילה portage בעברית מתורגמת להובלה או שינוע.

הפורטאג' בונה את עצמו בנפרד משאר מנהלי החבילות במספר דרכים. אבל הסיבה המשמעותית ביותר היא בכך שזה לא ממש מנהל חבילות, אלא שזה נחשב יותר כמנוע הפצת-על. הכוונה היא שבגלל הכוח, הגמישות ויכולת ההגדרה של הפורטאג', מספר מועט של התקנות לינוקס ג'נטו יהיו זהות. במקום להיות אך ורק כלי שמתקין ומסיר חבילות תוכנה (למרות שהוא עושה זאת בקלות רבה), המטרה של הפורטאג' היא ההרכבה של הפצת לינוקס שלמה, שהיא ייחודית למשתמש שיצר אותה. לפי ההגיון הזה נובע שלינוקס ג'נטו היא הפצת-על. זה לא מוצר סטטי וקבוע, אלא כלי חזק לאנשים שרוצים לבנות מערכת הפעלה מותאמת אישית לעצמם.

מטרת מדריך זה היא ללמד את "הדרכים הכי ידועות" לעבודה יומיומית עם הפורטאג'. זהו לא מדריך בסיסי או הצגת של השימוש בפורטאג' או emerge. אם אתה חדש לג'נטו, הדרך הטובה ביותר ללמוד איך להשתמש בכלים אילו היא בעזרת קריאת פרק עבודה עם ג'נטו של המדריכים הרשמיים של ג'נטו. במדריך זה אנו נביט לעומקה של דרך הפעולה של הפורטאג' וכיצד ניתן לשפרה.

[עריכה] עבודה עם חבילות

הפקודה emerge היא הדרך הראשית לעבוד עם הפורטאג'. כמעט כל הפעולות שיכולות להתבצע זמינות בעזרת שימוש במספר אופציות שורת פקודה שמשתלבות עם הפקודה. אנו נסביר כאן על כמה מהשימושיות ביותר. לרשימה מלאה של האופציות ראה את ה-man page של emerge.

  • emerge --ask (או בקיצור a-)
מציג לפני כל פעולה מה הולך להתבצע ומבקש אישור על כך.
אופציה זו דומה לאופציה pretend-- (בקיצור: p-), אבל זה חוסך לך את ההקלדה הכפולה של הפקודה (פעם אחת עם האופציה p- ופעם נוספת בלעדיה). האופציה ask-- אמורה להיות בשימוש כל פעולה שלך עם emerge, אז קח זאת כהרגל כבר עכשיו. ;)
root ~ # emerge -a patch

These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   R   ] sys-devel/patch-2.5.9

Do you want me to merge these packages? [Yes/No]
  • emerge --deep (קיצור D-)
בודק את כל עץ התלויות של החבילה ולא רק את התלות המיידית.
כאשר המטרה היא world, האופציה deep-- תבדוק את עץ התלויות של כל קובץ ה-world (יותר על זה בהמשך). אופציה זו יכולה למצוא עדכונים של חבילות שהפקודה emerge הרגילה לא תדווח.
  • emerge --tree (קיצור t-)
מציג את עץ התלויות של החבילה או המטרה.
זו יכולה להיות אופציה שימושית בעיקר בחיפוש. אם ניסית פעם לנסות להבין מה מה נגרר בחבילה ספיציפית, או שסתם רק רצית לראות מה תלוי במה, זו האופציה בשבילך. ;)
root ~ # emerge -atv asterisk

These are the packages that I would merge, in reverse order:

Calculating dependencies ...done!
[ebuild  N    ] net-misc/asterisk-1.0.8-r3  +alsa -bri -debug -doc -gtk -hardened -minimal +mmx +mysql -postgres -pri -resperl -speex -vmdbmysql -vmdbpostgres -zaptel 9,451 kB
[ebuild  N    ]  dev-libs/newt-0.51.6-r1  +gpm 152 kB
[ebuild  N    ]   sys-libs/slang-1.4.9-r2  -cjk -unicode 628 kB
[ebuild  N    ]  media-sound/mpg123-0.59s-r9  +3dnow +esd +mmx +nas +oss 246 kB

Total size of downloads: 10,477 kB

Do you want me to merge these packages? [Yes/No]
כאן ניתן לראות שהחבילה asterisk תלויה ב-newt ו-mpg123, ו-newt תלויה ב-slang. כמו כן, שים לב כי אופציה זו הופכת את הסדר שהחבילות רשומות. החבילה הראשונה שתותקן מופיעה בסוף הרשימה במקום בהתחלה.

[עריכה] שימוש בחבילות לא יציבות

ישנם דרכים רבות לכוונן חבילה מ-'לא יציבה' (unstable) ל-'יציבה' (stable) (בתכלס, הפורטאג' מתייחס למילות מפתח כ-x86, במקום ל-x86~ לדוגמא). מספר שיטות רעות להתקנת חבילות לא יציבות הופצו. להלן יוסבר כיצד וכיצד לא להתקין חבילות לא יציבות.

[עריכה] למה לא להשתמש במשתנה ACCEPT_KEYWORDS

דרך ידועה (אך לא מומלצת) היא שימוש ב-ACCEPT_KEYWORDS="~x86" emerge foo. שיטה זאת, באופן כללי, אינה השיטה שאתה תרצה ממספר סיבות. קודם כל, זה יתקין את הגירסאות הלא יציבות של החבילות התלויות בחבילה זו. שנית, ואף יותר מציק מנקודת תחזוקת המערכת, השינוי הנ"ל הוא זמני. בפעם הבאה שתריץ עדכון על המערכת שלך בעזרת emerge -u world, הפורטאג' ינסה להחזיר את אותה חבילה שהתקנת בצורה זאת (במקרה זה, foo) לחבילה הכי עדכנית ויציבה. פורטאג' יבטל את השינויים שלך, בגלל שאתה ביצעת שינוי זמני ע"י ה-emerge להתקנת של חבילה לא יציבה. להימנע מזה השתמש בקובץ etc/portage/package.keywords/. עזרה לגבי הוספת חבילות לקובץ זה תוכל למצוא במדריכים במדריכים הרשמיים.

  • אם אתה רוצה להשתמש אך ורק בתוכנות לא יציבות (מכונות גם חבילות בדיקה), תוכל לשתול את הפרמטר "ACCEPT_KEYWORDS="~x86 בקובץ etc/make.conf/.

[עריכה] למה לא להשתמש בפקודה emerge /path/to/ebuild

המלצה אחרת היא לא להשתמש ב-emerge /path/to/foo.ebuild. לשיטה זו יש מספר השפעות לא טובות. בכל מקרה, אתה לא מורה לפורטאג' לסמן גירסה זו כיציבה, וכך הפורטאג' ינסה להחזיר אותה לגרסה היציבה בפעם הבאה שתריץ עדכון מערכת בעזרת emerge -u world. בנוסף, השפעה מטרידה אחרת היא כמו שימוש באופציה oneshot--. במילים אחרות, אם חבילה זאת אינה בקובץ var/lib/portage/world/, הפורטאג' לא יוסיף אותה. החבילה לא תעודכן אלא אם כן תעדכן אותה ידנית. כמו כן, emerge -u world יחמיץ עדכון חבילה זו.

[עריכה] למה להשתמש ב-package.keywords

השיטה הנכונה היא להשתמש בקובץ etc/portage/package.keywords/, שנותנת לך שליטה רחבה יותר מאשר השיטות לעיל. פירוט מלא על השיטה ניתן למצוא ב-portage mane page, בנוסף לדוגמא קצרה שנציג כאן. אם תרצה להורות לפורטאג' להתנהג עם גירסה לא יציבה כגירסה יציבה, תוסיף שורה בקובץ:

קובץ: etc/portage/package.keywords/
=dev-util/bsdiff-4.2        ~x86

זוהי גירסה יחידה של 'אטום'. רק תשים לב כי אתה חייב להורות על כך בעזרת '=', ולהורות על מטרה מלאה כ-'קטגוריה'/'חבילה' (בדוגמא זו: dev-util/bsdiff) ולהגדיר בנוסף גירסה (בדוגמא זו: 4.2). אם תרצה להשתמש בחבילה לא יציבה כיציבה תמיד, תוכל לעשות זאת כך:

קובץ: etc/portage/package.keywords/
dev-util/bsdiff        ~x86

זהו אטום בלי גירסה: כל הגירסאות של mplayer יחושבו כיציבות. שים לב כי תוכל לשים כמה חבילות שתרצה ב-etc/portage/package.keyword/, כאשר בכל שורה בקובץ יש חבילה אחת בלבד.

[עריכה] תחזוקת חבילות

לעיתים הפורטאג' יצטרך להוריד חבילה לגירסה ישנה יותר. באופן כללי, יש סיבה טובה שעומדת מאחורי זה וטוב שכך. כמו כן, יש חריגים לכך. לדוגמא, linux-headers ירצה להחזיר לאחור ל-2.4 כאשר יש במערכת קרנל 2.6 (הערה: זה כבר לא קיים מגירסה 2005.0). כדי לעשות זאת, נוסיף שורה בקובץ etc/portage/package.keywords או נעשה:

echo sys-kernel/linux-headers -* >> /etc/portage/package.keywords

חבילות יורדות בגירסתן כאשר חור אבטחה מתגלה בגירסה החדשה ומסיבות שונות נוספות אחרות כמו למשל אי יציבות. בנוסף, כל מיני גרסאות מסומנות כיציבות מוקדם מידי (אחרי הכל, הם רק אנושיים P-:).

חבילות לפעמים מנסות להתגנב לתוך המערכת כאשר הן אינן נזקקות. פעם משתמשים של xorg-x11 יכלו לשים לב ש-xfree מנסה ליצור את עצמו חזרה למערכת. כדי לתקן את זה, נוספה שורה בקובץ etc/portage/package.mask/:

קובץ: etc/portage/package.mask/

x11-base/xfree

חבילות גם מפעם לפעם ממסכות באופן קשה. דוגמא אחת לזה היא zoneminder. החבילה ממוסכת באופן קשה (הגירסה האחרונה שלה) בגלל שיש בה חור אבטחה שיכול להעמיד את המערכת בסכנה. אם בכל זאת תרצה להשתמש ב-zoneminder השתמש בפקודה הבאה:

echo www-misc/zoneminder >> /etc/portage/package.unmask

אם לא תרצה שחבילה תשתמש בדגל USE מסוים, ישנו את הקובץ package.use בשביל זה. עשה זאת באמצעות הפקודה הבאה:

echo net-p2p/bittorrent -X >> /etc/portage/package.use

זה יגרום לפורטאג' לא להכליל את דגל ה-X כאשר הוא יאמרג' (בא מהמילה emerge) את bittorrent.

טיפ!

השתמש ב-ACCEPT_KEYWORDS כדי למצוא את כל התלויות.

אבל כאשר תרצה להשיג רק גירסה חדשה אל GNOME, KDE או כל חבילה אחת אחרת עם תלויות רבות אחרות זה יכול להיות ממש כאב ראש להשתמש ב-emerge -pv gnome כדי להשיג תלות אחת בלבד בכל פעם. לכן תוכל להריץ:

ACCEPT_KEYWORDS="~x86" emerge -pv gnome

קח את כלל התלויות והוסף אותם ל-etc/portage/package.keywords/.

[עריכה] תחזוקת קובץ world

ראשית, קצת מידע על מה בדיוק זה קובץ world. המטרה של קובץ world היא לרשום את כל החבילות שהמשתמש רוצה לעדכן באופן נורמלי. כאשר אתה מריץ emerge gnome, פורטאג' רושם את החבילה (gnome-base/gnome) בתוך קובץ world, רק את gnome ולא את כל התלויות שלו. אם תאבד את קובץ world שלך, הפורטאג' לא ידע איזה חבילות תרצה לעדכן - זה, כמובן, לא רצוי. כדי (לנסות) לתקן את קובץ עולם ולהוסיף את החבילות, הקלד: regenworld. ישנו גם אשכול בפורום שמספק מידע אודות תיקון קובץ world אם הפקודה regenworld לא עובדת.

[עריכה] חוסכים בזמן

בשביל כל אלה שרוצים לפשט את כל הניהול של "keywords ו-"useflags", ישנו יישום בשם app-portage/flagedit שעוזר מאוד לניהול של keys ו-useflags.

כדי לאפשר דגל (flag) לחבילה

flagedit foo-foo/foo +fooflag

כדי למנוע דגל (בהתעלמות ממה שרשום בקובץ make.conf ולמרות מה שמוגדר בפרופיל שלך)

flagedit foo-foo/foo -fooflag

כדי להשתמש בקובץ make.conf ובפרופיל שלך (ברירת מחדל)

flagedit foo-foo/foo %fooflag

באופן כללי: ידוע גם make.conf כמו שמוזכר למעלה, אבל בלי החלק foo-foo/foo:

flagedit +fooflag
flagedit -fooflag
flagedit %fooflag

אם תרצה לאתחל את כל דגלי ה-use לחבילה:

flagedit foo-foo/foo %

keywords כדי לשלוט ב-keywords, זה כמו useflags, חוץ מהמיקום של -- בתוך הביטוי

flagedit foo-foo/foo -- +~fooArch
flagedit foo-foo/foo -- -~fooArch
flagedit -- -~fooArch
flagedit -- +~fooArch
flagedit foo-foo/foo -- %~fooArch

[עריכה] מסקנה

כדי לעדכן את כל המערכת שלך הרץ את הפקודות הבאות:

קוד: עדכון המערכת

עדכון עץ הפורטאג'

# emerge --sync
# emerge --update --ask --verbose --tree --deep --newuse world

תוכל לכתוב בקיצור במקום הפקודה האחרונה:

# emerge -uavtDN world

מכיוון שתלויות של חבילות משתנות בכל כמה זמן, הרץ גם את שתי הפקודות הבאות:

# emerge --depclean
# revdep-rebuild -- -p -v

(שתי הפקודות האחרונות חייבות להיות בסדר הזה, אבל הן לא הכרחיות בכלל)

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

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