כשצריכים עדכוני אבטחה ואי אפשר לשדרג הפצת לינוקס

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

אז מה עושים אם יש לנו מכונת אובונטו מגירסה ישנה כמו 14? זה כבר לא נתמך במסגרת ה-LTS (כלומר Long Term Support) שלא לדבר על המקרים בהם הותקנה גירסת אובונטו אך משום מה לא התקינו גירסת LTS…

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

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

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

  • קבלת תמיכה בהתאם לחבילה – מענה תוך שעה, 4 שעות וכו' – לתמיכה ל-OS עצמו
  • קבלת תמיכה לאפליקציות מסויימות תוך עמידה ב-SLA, כולל תיקוני באגים.

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

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

מבינים משהו מהתוכן במלבן הצהוב? כן, הוא טוען שאם מודל ה-ESM היה פעיל, הוא היה משדרג גם את החבילות הללו. הבעיה? המודול פעיל בהחלט. אם תנסה לשדרג ידנית את החבילות, תגלה שיש בעיות רציניות של תלויות, אבל ה-Advantage משאיר לך לשבור את הראש לבד.

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

טיפ בנושא: שדרוג מכונות RHEL

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

כשיש לכם שרת אחד או 2, או מספר קטן מאוד של תחנות RHEL, אז העדכון הוא עניין די פעוט (מבחינת udates, מבחינת upgrade עם אותם עדכונים זה משהו אחר), אבל מה עושים כשיש לך כמה עשרות ואולי מאות שרתים/תחנות עבודה? לתת לכל מכונה להוריד את העדכונים שלה זה נחמד אבל זה לוקח זמן, רוחב פס ודיסק בכל פעם. האם אי אפשר לסדר זאת בתצורה כזו שכל המכונות ישאבו משרת אחד?

לרד-האט יש פתרו שנקרא Red Hat Satellite המאפשר לא רק עדכונים אלא life-cycle שלם למכונות ושרתים שכולל שרותים כמו דיווחי באגים, תמיכה, קבלת תיקונים, בדיקות, יצירת ISO לצרכים שונים וכו'. הכלי הוא כלי גדול וגם עולה בהתאם (כמה אלפי דולרים מחיר התחלתי). אנחנו לעומת זאת צריכים רק את העדכונים, לאחסן אותם על שרת שלנו ואנחנו כבר נפיץ אותם בזמן שנקבע.

על מנת לבצע זאת, נצטרך קודם כל לברר אלו גרסאות RHEL אנחנו משתמשים בחברה. 5? 6? עבור כל אחת מהגרסאות העיקריות נצטרך VM עם המון דיסק פנוי (במינימום 40-50 ג'יגה) וכמובן רשיונות, רשיון פר גירסה Major כך שאם אנחנו משתמשים בחברה ב-RHEL-6 וגם RHEL-5 ולשתיהם אנחנו צריכים עדכונים, אנחנו צריכים 2 רשיונות (כמובן שצריך רשיונות לכל תחנת/שרת RHEL כדי לקבל תמיכה וכו') על מנת לבצע את הקמת ה-REPO החדש שלנו.

ראשית, יש להקים VM עם גירסת RHEL הרצויה. ההתקנה מספיק שתהיה בסיסית עם גישת רשת החוצה ב-HTTP. ויש לבצע register של אותה מכונה ל-RHN. לאחר ההתקנה יש ליצור תיקיה שאליה נאחסן את הקבצים. נקרא לה var/repo/

כעת יש לוודא שחבילת yum-utils וחבילת createrepo מותקנות. אם לא, אפשר להתקין אותם ישירות מה-ISO או בעזרת yum.

כעת נוודא שהשרת רשום לערוץ שממנו אנו רוצים לשאוב עדכונים. לשם כך אפשר להשתמש בפקודה:

rhn-channel -l

אם הכל תקין, נקבל תשובה: rhel-x86_64-server-6 (במקרה שההתקנה היא 64 ביט גירסה 6).

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

cd /var/repo
reposync -l --repoid=rhel-x86_64-server-6

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

הסתיים? מצוין, עכשיו ניצור ממה שירד repository עם הפקודה הבאה:

createrepo -v --update rhel-x86_64-server-6/getPackage/

זהו. יש לנו repo עם כל ה-RPMS שיש ב-RHEL-6 כולל דברים ישנים וחדשים.

על מנת לאפשר גישה לקבצים שהורדנו, נקים שרות httpd. התקינו את חבילת httpd ובתוך etc/httpd/conf.d/ נקים קובץ בשם repo.conf שיאפשר גישה לקבצים. הנה דוגמא לקובץ:

<VirtualHost *:80>
ServerName rhelrepo
DocumentRoot /var/repo/rhel-x86_64-server-6
ErrorLog logs/repo-error_log
CustomLog logs/repo-access_log common
<Directory "/var/repo/rhel-x86_64-server-6/">
Options Indexes FollowSymLinks
</Directory>
</VirtualHost>

שימו לב לשנות את שם ה-ServerName לשם השרת שלכם.

כעת נפעיל את שרות ה-httpd (עם הפקודה: service httpd restart) ועם הדפדפן ניגש לכתובת: http://rhelrepo/getPackage (שוב, שנו את השם rhelrepo לשם השרת שלכם). אם הכל תקין, תקבלו רשימה ארוכה של קבצי ה-RPM.

עכשיו מגיע החלק שתפיצו בעזרת כל כלי שתרצו – אל כל השרתים שלכם, קובץ repo שב בתיקיה etc/yum.repos.d/ שם ניצור קובץ שנקרא לו rhel6.repo

[RHEL-6-UPDATES]
name=RHEL-6.x Updates
baseurl=http://rhelrepo/getPackage/
enabled=1
gpgcheck=0

מומלץ למחוק את שאר הקבצים שנמצאים באותה תיקיה (ושמורידים את אותם עדכונים מרחוק).

כעת הגיע המבחן הגדול: הריצו yum update ותראו אם המערכת מוצאת עדכונים ומורידה אותם. אם כן, אז ברכותיי – הרמתם לכם שרת REPO מקומי משלכם.

מה שנשאר לעשות הוא להשתמש בפקודות ה-reposync וה-createrepo בתוך סקריפט שירוץ אחת ליום דרך ה-crontab ויעדכן את החבילות ישירות מרד-האט. את זמן ההפצה לכל השרתים והתחנות אתם קובעים לפי הנהלים באותה חברה.

אם אתם צריכים עדכונים ל-RHEL-5, ההבדל היחיד הוא בשם הערוץ, אותו תוכלו לקבל עם פקודת rhn-channel -l

בהצלחה