תרגום: כיצד לקמפל קרנל – גישת אובנטו

הקדמה

תרגום והרחבה של המאמר How To Compile A Kernel – The Ubuntu Way באתר Howto Forge.
הזכויות על התמונות והטקסט שמורות למחבר המקורי – Timme Falko.

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

– המאמר נבדק ע"י כותב המאמר המקורי על-גבי מערכת אובנטו 6.06 גירסת שולחן העבודה ועל-גבי אובנטו 6.10 גירסת השרת, אך אמור לעבוד על כל גירסאות אובנטו.

התקנת חבילות נדרשות לצורך קימפול הקרנל

תחילה נעדכן את מסד הנתונים של מנהל החבילות:

sudo apt-get update

לאחר-מכן נתקין את כל החבילות הנדרשות:

sudo apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

הורדת קוד-המקור של הקרנל

בשלב הנוכחי נוריד את קוד-המקור לספרייה usr/src/. גש ל-www.kernel.org ובחר את גירסת הקרנל אותה ברצונך להתקין. למשל linux-2.6.21.5.tar.bz2.
נוריד את הקובץ המכווץ המכיל את קוד-המקור של הקרנל המבוקש אל ספרייה usr/src/:

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.5.tar.bz2

כעת נפרוס את הקובץ המכווץ וניצור קישור סימבולי (symbolic link) בשם linux לקוד-המקור:

tar xjf linux-2.6.21.5.tar.bz2
ln -s
linux-2.6.21.5 linux
cd /usr/src/linux

הטלאת קוד-המקור של הקרנל (לא חובה)

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

נניח שהורדנו את הטלאי הנדרש (אשר לצורך העניין יקרא למשל patch.bz2) לספרייה usr/src/. נטליא את קוד-המקור של הקרנל בעזרת הטלאי (בהנחה שהינך עדיין בספרייה הנ"ל). תחילה נריץ בדיקה, הרצה יבשה של תהליך ההטלאה אשר איננה משנה את קוד-המקור.

bzip2 -dc /usr/src/patch.bz2 | patch -p1 –dry-run

אם לא נתקבלו שגיאות ניתן להריץ את הפקודה השניה אשר מטליאה בפועל את הקרנל. אל תבצע אותה אם התקבלו שגיאות לאחר הפקודה הראשונה:

bzip2 -dc /usr/src/patch.bz2 | patch -p1

כאשר נרצה תכונה הקיימת אך ורק בגירסת קרנל שהיא במצב מועמד-שחרור (RC, release candidate) או במצב קדם-שחרור (prerelease) וקוד-המקור המלא של גרסאות אלו טרם שוחרר נוכל להטליא את הקרנל בעזרת קדם-טלאי (prepatch או אולי עדיף לתרגם טלאי מוקדם?). למשל, אם נרצה תכונה הקיימת ב-linux-2.6.22-rc2 ניתן להטליא בעזרת הטלאי patch-linux-2.6.22-rc2.tar.bz2 אך ורק קוד-מקור בגירסא linux-2.6.21, אך לא בגירסאות משנה כמו linux-2.6.21.5.
הסברים נרחבים יותר על קדם-טלאים ניתן למצוא ב-http://kernel.org/patchtypes/pre.html.

קביעת התצורה של הקרנל

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

sudo cp /boot/config-`uname -r` ./.config

– תן דעתך על הגרש ההפוך "`", גרש זה קיים במקלדת ליד הספרה 1. תפקידו לנווט את הפלט של הפקודה שבתוכו חזרה למעטפת.
נפעיל את האשף menuconfig המאפשר את קביעת תצורת הקרנל:

sudo make menuconfig

– לחלופין ניתן להשתמש ב-sudo make xconfig אשר יפעיל אשף גרפי. למיטבי לכת ניתן לערוך את קובץ התצורה config. גם באופן ידני.

נדפדף בעזרת מקשי החיצים למעלה-למטה אל האפשרות "Alternate Configuration File" ונבחר בקובץ "config." (אשר מכיל כאמור את התצורה הנוכחית של הקרנל העובד) כקובץ תצורה חלופי:

Alternate config file
Do you wish to save your new kernel configuration
לאחר-מכן נדפדף דרך האפשרויות השונות ונבחר את האפשרויות והמודולים הרצויים. כאשר נסיים לבחור ונרצה להמשיך נבחר ב-Exit בעזרת מקשי החצים ימין-שמאל, נשיב ב-Yes על השאלה האם ברצוננו לשמור את התצורה החדשה של הקרנל (?Do you wish to save your new kernel configuration):

Do you wish to save tour new kernel configuration

בניית הקרנל

כדי לבנות קובץ חבילת deb. של הקרנל מקוד-המקור נריץ את הפקודות הבאות:

make-kpkg clean
fakeroot make-kpkg –initrd –append-to-version=-custom kernel_image kernel_headers

התוכנה make-kpkg הינה תסריט של מערכת דביאן (debian) המאפשר בניית חבילות deb. מקוד-מקור. את הפקודה make-kpkg אנו מריצים תחת fakeroot שהוא כלי המאפשר לדמות סביבה של משתמש-על.

לאחר התגית "append-to-version–" ניתן להוסיף כל מחרוזת שתעזור לנו לזהות את הקרנל, עם זאת המחרוזת חייבת להתחיל בסימן מינוס (-) ואיננה יכולה לכלול רווחים.

כעת נמתין ב ס ב ל נ ו ת, קימפול הקרנל עלולה לקחת מספר שעות, כתלות בתצורת הקרנל ובמהירות המעבד.

התקנת הקרנל החדש

בתום תהליך בניה מוצלח של הקרנל נמצא בספרייה usr/src/ שני קבצי חבילות deb. חדשים:

cd /usr/src
ls -l

linux-image-2.6.21.5-custom_2.6.21.5-custom-10.00.Custom_i386.deb
linux-headers-2.6.21.5-custom_2.6.21.5-custom-10.00.Custom_i386.deb

החבילה הראשונה כוללת את הקרנל עצמו והשניה כוללת קבצים להם נזדקק אם נרצה בעתיד להוסיף ולקמפל מודולי קרנל נוספים.

נתקין את שתי החבילות בדרך הבאה:

sudo dpkg -i linux-image-2.6.21.5-custom_2.6.21.5-custom-10.00.Custom_i386.deb
sudo dpkg -i linux-headers-2.6.21.5-custom_2.6.21.5-custom-10.00.Custom_i386.deb

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

בדיקת ה-GRUB

ניתן לבחון את הקובץ boot/grub/menu.lst/ ולראות כי נוספו בו שתי שורות חדשות:

less /boot/grub/menu.lst

אשר יכולות להיות (תלוי במיקום מחיצת ה-root במחשב שלנו):

title Ubuntu, kernel 2.6.21.5-custom
root (hd0,0)
kernel /boot/vmlinuz-2.6.21.5-custom root=/dev/sda1 ro quiet splash
initrd /boot/initrd.img-2.6.21.5-custom
savedefault
boot

title Ubuntu, kernel 2.6.21.5-custom (recovery mode)
root (hd0,0)
kernel /boot/vmlinuz-2.6.21.5-custom root=/dev/sda1 ro single
initrd /boot/initrd.img-2.6.21.5-custom
boot

נאתחל את המערכת:

sudo shutdown -r now

בתפריט ה-GRUB נבחר בקרנל החדש:

new kernel entry
אם ישנם בעיות נאתחל את המחשב ובתפריט ה-GRUB נחבר בגירסת הקרנל הישנה ונסיר את הקרנל החדש.

קריאה נוספת
פורסם בקטגוריה מחשבים, עם התגים , , , , , , . אפשר להגיע לכאן עם קישור ישיר.

0 תגובות בנושא תרגום: כיצד לקמפל קרנל – גישת אובנטו

השאר תגובה