כל הזכויות שמורות לטל בן שושן – Shushan.co.il
SystemD – SysV – Upstart – Linux Services And Boot
נתחיל קצת מההתחלה, בעבר היה לCentOS 5 את SysV שאחראי על עליית השירותים והסקריפטים, לאחר מכן ב CentOS 6 שינו את זה ל upstart ואז לבסוף ב CentOS 7 שינו את זה לSystemD
אז מה כל השמות האלו אומרים? Sys v או Upstart או SystemD הם מנהלי השירותים של לינוקס, הם אחראים לעלות את כל השירותים הנחוצים למערכת הפעלה לעבוד וכל זה מיד לאחר ה Boot הם מעלים את Bash ושירותי הרשת ושירותי השפה ושירות הCLI וכו'
כעת נציג ונסביר את כל הצדדים:
Sysv Init – שוחרר ב1983 טוען את הסקריםטים ואת השירותים הנלווים לכך על פי סדר, אותם שירותים שנקראים בעולם הלינוקס דימון או Deamons הם אלו בעצם שעולים ראשונים לאחר ה Boot וממשיכים לעבוד תמיד ולספק את השירות שהם אמורים לספק, Sysv היה מיושן הוא עבד במשך 20 ומשהו שנים ברצף ולא יכל לעבוד במשימות מרובות כמו משתמשים מרובים, יצירת תיקיות או לעלות שירותים באותו הזמן ולכן היה צורך להחליפו במאמר זה נראה כיצד עבד
Upstart – הוא גם היום בשימוש נרחב שכן הוא נמצא בהפצות של לינוקס שעד לפני כמה שנים היו יוצאות רק איתו, חברת Canonical הוציאה את UPSTART והוא הוגדר להיות תואם ל Sysv שכן כל הסקריפטים והשירותים יעבדו איתו והציג צורת עבודה חדשה.
SystemD – הוא מנהל השירותים החדש ביותר וכמעט כל ההפצות יוצאות עם Systemd, מנהל זה הוא המתקדם ביותר בכך שהוא מאפשר למתכנתים ליצור תוכניות בקלות ומשתמש בשיטת הרצה בשם Systemd
SysV
כעת אני אשתמש ב CentOS 5.5 בדיוק, הסיבה כמובן זה שאני מעוניין להשתמש ב SysV על מנת להציג לכם את הצורה בה גרסה זו עבדה
[root@localhost ~]# vim /etc/inittab
לאחר העריכה העתקתי לכאן את הדברים החשובים באמת,
# Default runlevel. The runlevels used by RHS are:
# 0 – halt (Do NOT set initdefault to this)
# 1 – Single user mode
# 2 – Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 – Full multiuser mode
# 4 – unused
# 5 – X11
# 6 – reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
כאשר המערכת עולה, היא תטען את הסקריפטים והרכיבים הבאים לפי סדר, הדגשתי למעלה את מה שיש לו # שזה אומר שזה רק טקסט המסביר על הקובץ הזה והפעולות שלו.
בתצורה זו אפשר לראות שיש סדר לטעינת הקבצים והסקריפטים מ1 עד 6 כל L מסמן Level שכן בעלייה כל שלב עולה לפי הסדר 1 2 3 4 5 6.
0 – מגדיר לכבות את הסקריפט או הרכיב אם מוגדר לעלות בשלב 0
1 – מגדיר את שלב היוזר מוד, למשל שחכתם את הסיסמא ל root, ניתן לאפס אותה על ידי כניסה למערכת שעולה עד השלב הזה, שלב 1
2 – השלב הכמעט סופי של עליית המערכת, רק ללא NFS הגדרות מערכת הקבצים.
3 – עליית השרת באופן מלא – שרת אני מדגיש את השרת שכן זה עליית מערכת ההפעלה ללא הGUI או ה Xwin
4 – ללא שימוש (רשום לכם גם למעלה)
5 – X11 – עליית מערכת ההפעלה באופן מלא כולל ה GUI, ניתן לראות בשורה מתחת id:3:initdefault: מזה אומר? שיש GUI בשרת הזה שאני משתמש או לא? כמובן שלא אמרנו ש3 מעלה את השרת עצמו כCLI, אם רשום לכם 5 ואתם רוצים לעלות את המערכת ללא GUI אתם יכולים לשנות את זה ל3 או דרך הפקודה
קודם נקיש את הפקודה
runlevel
פקודה זו תציג באיזה רמה אנחנו נמצאים
אבל אם אתם ברמה 5 GUI יש להגדיר:
telinit 3
פקודה זו תגיד לו לעלות בשלב 3.
כעת נבדוק איזה סקריפטים עולים ומה הסדר שלהם בתיקיות.
אם נכנס דרך WinSCP לנתיב /etc/init.d נוכל לראות ש init.d הוא למעשה סימבוליק לינק (קיצור דרך) למקום אחר, המקום האחר הוא למעשה
/etc/rc.d
נוכל גם לבדוק עם הפקודה
[root@localhost ~]# ls -l /etc/init.d
lrwxrwxrwx 1 root root 11 Jun 24 08:24 /etc/init.d -> rc.d/init.d
נכנס לנתיב זה /etc/rc.d ונבדוק מה יש בתיקייה
[root@localhost rc.d]# ls
init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit
rc rc1.d rc3.d rc5.d rc.local
נוכל לראות שיש תיקיות יש את init.d, יש תיקייה בשם rc0.d ויש את התייקיה rc1.d ועוד תיקיות עם מספרים עד 6, כמו שהסברתי מקודם, תהליך עליית המערכת היא לפי סדר מ1 – 6 ולכן בכל תיקייה כזו יהיה קבצים בהתאם לסדר העלייה
ניתן לראות בתיקייה את סדר הקבצים והופעתם.
והנה מופיע לכם init.d והתיקיות לפי סדר הופעתם (במקרה שצילמתי מהאחרון לראשון.
למשל rc0 נוכל לראות שהקבצים מתחילים באות K, האות K מסמלת Kill שכן יש לחסל את השירותים לפי סדר למשל K02 "יחוסל" שני ואילו K95 במקום התשעים וחמש.
נעבור לrc3 בו נוכל לראות את הסקריפטים עם S בהתחלה, שכן S מסמל Start וגם פה לפי סדר אם נשנה את האות ל K אז השירות לא יעלה בשלב 3.
אבל בכל התיקיות תוכלו לראות שגם הקבצים בתוכם הם למעשה סימובליק לינק למקום אחר, לדוגמה השירות ssh, בכלל מופעל מהתיקייה init.d ושם שוכן הקובץ המקורי, רק שתיקייה זו אומרת שהוא יופעל במקום ה 55.
אם נעבור לתיקייה המקורית של init.d נוכל לראות את כל הקבצים שרצים שם
אם נקיש את הפקודה
[root@localhost rc.d]# chkconfig --list
נוכל לראות מה קורה עם כל שירות בכל שלב, ניקח למשל את השורה הזו
[root@localhost ~]# bluetooth 0:off 1:off 2:on 3:on 4:on 5:on 6:off
בשלב 2 3 4 ו5 ההוא פעיל ואילו ב 0 ו6 הוא לא פעיל (הגיוני מאוד)
כמובן שנוכל לשנות זאת על ידי כלי ייעודי שהוא הchkconfig, למשל נוכל להחליט שבשלב 4 ה bluetooth לא יעבוד
נקיש
[root@localhost ~]# chkconfig bluetooth --level 4 off
מעולה!
כעת נבדוק איזה שירותים עולים בצורה קצת שונה
נקיש את הפקודה
ntsysv
וחלון יעלה:
וכאן אתם יכולים לראות בדיוק את התצורה בה איזה רכיב עולה ולבטל או להגדיר שהוא יעלה בעליית המערכת.
UPstart
לאחר CentOS 5 שהיה אחרון עם מערכת SysV , מפתחי CentOS הבינו שהשיטה בה המערכת עולה רק בסדר מסוים יוצרת מצב מיושן ויש ליצור מערכת טובה יותר שמתחילה את הכל באותו זמן ובכך לעלות את המערכת מהר יותר ולכן ב CentoS 6 הם הכניסו את Upstart ואילו ב CentOS 7 הכניסו את SystemD שנדבר עליה בהמשך.
כעת אני עובר להשתמש בגרסה 6.9 של CentOS.
אני נמצא ב rc.d שנראה בדיוק כמו ב CentOS 5.5, אז בטח אתם שואלים מה ההבדל? הסיבה היא ש UPstart מנסה להתאים את עצמה גם אחורנית ל SysV ובאותו הזמן להתאים לשירותים שרוצים לעבוד תחת Upstart.
כעת נעבור לתיקייה Init שנמצאת ב /etc/init ולמעשה כאן נמצאים השירותים שהותאמו ל upstart ולכל תוכנית שעובדת עם upstart תוגדר כאן
בתיקייה ניתן לראות קובץ בשם rcS.conf שהוא למעשה מתאם בין UPstart לבין SysV
אם נפתח את הקובץ נוכל לראות שכתוב
# This task runs the old sysv-rc startup scripts.
והוא למעשה מכיל סקריפט שמעלה את כל הסקריפטים הישנים בדיוק כמו SysV על מנת שהם יעבדו גם במערכת ללא SysV
SystemD
הוא מנהל התהליכים החדש ביותר ורוב ההפצות הגדולות משתמשות בו כיום, בתוכו קיים כלי בשם Systemctl שאיתו עובדים המון.
לקחתי את הטבלה של פדורה, מהאתר https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet
והכנסתי לכם אותה פה
למשל, ניתן לבצע ריסט לשירות מסוים או לעצור אותו
[root@localhost ~]# systemctl start httpd
או לאפשר לו לרוץ בעליית מערכת ההפעלה
[root@localhost ~]# systemctl enable *service name*
נאמר אתם רוצים לחפש איזה שירות פעיל
[root@localhost ~]# systemctl list-unit-files --type=service
למשל התקנתי httpd – שירות IIS
[root@localhost ~]# yum install httpd
כעת השירות עובד, אבל האם הוא יעלה בהפעלה הבאה של מערכת ההפעלה?
נבדוק עם הפקודה שהזכרתי למעלה והתוספת grep על מנת לחפש ספציפית את השירות הזה
[root@localhost ~]# systemctl list-unit-files --type=service | grep httpd
נקבל
[root@localhost ~]# httpd.service disabled
אז כעת נפעיל אותו על ידי הפקודה systemctl
[root@localhost ~]# systemctl enable httpd
ועכשיו אם נבדוק עם הפקודה systemctl list-unit-files –type=service | grep httpd
[root@localhost ~]# httpd.service enable
נערוך את
[root@localhost ~]# vim /usr/lib/systemd/system/ctrl-alt-del.target [root@localhost ~]# /etc/systemd/system/default.target
לדוגמה נתקין httpd,
[root@localhost ~]# yum install httpd
כעת נבדוק אם השירות פעיל
ניתן לראות שלא
httpd.service disabled
אז כעת נאפשר את השירות
ניתן לראות שנקבל הערה
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
הערה זו אומרת שsystemD יצר סימבוליק לינק ל /usr/lib/systemd/system/httpd.service ובכך ברגע שהמערכת תעשה ריסטארט היא תעלה עם httpd, נבדוק שוב
systemctl list-unit-files --type=service | grep httpd
httpd.service enabled
אם ננווט בעזרת winscp ל נראה שבתייקה /usr/lib/systemd/system/ יש קובץ בשם httpd.service
rc.d and init.d
בנתיב
/etc/init.d
יש לנו סימבוליק לינק שהוא init.d למעשה הוא מוביל ל
/etc/rc.d
ובתיקייה זו יש את כל הסקריפטים שעולים כאשר מערכת ההפעלה עולה.
לכן נוכל לבצע
[root@localhost ~]# ls /etc/rc.d init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local
בתוך התיקיות הממוספרות האלו יש את הסקריטים, אבל שאלו את עצמכם מדוע הם ממוספרים, המספרים מייצגים את תהלכי העלייה של הסקריטים כאשר המערכת עולה, מה יעלה קודם ומה אחרון
אבל זה גישה של הגרסאות הישנות יותר של centos
ה init.d החדש הוא למעשה systemctl, שהוא למעשה מריץ את הסקריטים בעליית המחשב
אם ננווט ל
/etc/systemd/system/
נגלה שגם פה חלק הקבצים הם סימבוליק לינק ל
/usr/lib/systemd/system/