חיפוש
  • יניב אור

SysV init

עודכן ב: 7 יול 2019

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

בחרתי להשתמש במערכת הזאת מכמה סיבות:

המטרה היא ללמוד כמה שיותר על המערכת וניהול ידני/חצי-אוטומטי משיג את המטרה הזאת

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

סביבת מעבדה, כמה שיותר שליטה, פחות הפרעות.

בכל רגע נתון, System V, נמצא באחד מכמה מצבים מוגדרים. הם נקראים runlevels.

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

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

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

0 עצירה - Halt

1 מוד משתמש יחיד - Single-user mode - (נקרא גם S או s)

6 אתחול - Reboot

השלבים הנוספים הם: 2-5 מוד ריבוי משתמשים (Multi-user mode)

יש אפשרות להשתמש גם ב-7 עד 9 אבל זה לא נהוג.

ב-Debian Strecth, שלבי הריצה הבאים מוגדרים:

N System bootup (NONE).

S Single user mode (not to be switched to directly)

0 halt

1 single user mode

2 .. 5 multi user mode

6 reboot

ב-/etc/inittab מוגדרים שלבי-הריצה השונים.

runlevel or who -r - to see current run-level

ה-process הראשון שרץ ע"י ה-kernel זה init - ה-pid שלו 1.

אחד החסרונות ב-init שהוא מריץ את המשימות שלו בצורה טורית מה שמאט את מהירות אתחול המערכת ובעיות נוספות.

ב-/etc/init.d/ נמצאים הסקריפטים עצמם וב-/etc/rc* נמצאים לינקים לקבצים ב-init.d והם קובעים את ה-priority והסדר בזמן ריצת ה-init.

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

היא לא קשור ספציפית ל-init.d והיא מערכת ניהול service-ים עצמאית (היא עובדת גם מול systemd, למשל ואחרים).

service SCRIPT COMMAND [OPTIONS]

הסקריפטים ש-service מריץ חייבים להכיל לפחות את הפקודות: start ו-stop

סקריפטים של init לפי תקן LSB חייבים לעמוד בדרישות הבאות:

לממש את: start, stop, restart, force-reload, status

להחזיר exit code תקין

service SCRIPT --full-restart

יריץ את SCRIPT פעמיים, פעם ראשונה במצב stop ובפעם השנייה במצב start.

service --status-all

מריץ את כל הסקריפטים לפי סדר האלף-בית, עם COMMAND = status

אלו הם משתני המערכת שמועברים לסקריפטים ב-init.d:

LANG, LANGUAGE, LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES, LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION, LC_ALL, TERM,

PATH

example: echo $LANG

cat /etc/init.d/skeleton

שלד לקובץ מסוג init.d

less /etc/init.d/README

קרא הסבר מפורט ובנוסף man insserv

update-rc.d

מנהל את הלינקים ב-/etc/rcrunlevel.d/NNname ובעצם מאפשר/לא מאפשר לסקריפטים לרוץ ב-init

אם רוצים למנוע מסקריפט להיטען ב-init מחליפים את הלינק מ-S ל-K

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

החבילה sysv-rc-conf מכילה כלים לניהול, בצורה נוחה יותר.

/lib/lsb/init-functions

יש בקובץ הזה פונקציות שימושיות, אפשר להכליל אותו בסקריפט בצורה:

. /lib/lsb/init-functions

/lib/init/vars.sh

מכין את המשתנים של rcS

/var/run/utmp and /var/log/wtmp

שים לב לקבצים הבאים

בהתקנות של Debian, בברירת מחדל, אין הבחנה בין שלבי-ריצה 2 עד 5 מה שנותן לנו חופש פעולה וקינפוג.

השימוש בשלבי-הריצה S ו-1 הוא לצורך תחזוקה.הם מתחילים service-ים בצורה מינימלית כדי למנוע בעיות אפשריות.

לשים לב, אתחול המערכת ב-Debian, בברירת המחדל נעשה בשלב-ריצה 2. כפי שמוגדר ב-/etc/inittab

ניתן לדרוס את ההגדרה הזאת בזמן ה-boot בעזרת פרמטר kernel.

יש גם אפשרות לשנות שלב-ריצה בזמן ריצה. שנה רק 1 עד 5.

init [runlevel]

or

telinit [runlevel] - רצוי להשתמש בזה



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



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


עוד שירטוטים שהכנתי. הסברים ומאמרים, בהמשך...




© 2023 by DO IT YOURSELF. Proudly created with Wix.com