Процес на стартиране на Debian GNU/Linux

\par
Когато включите компютъра си, първото нещо, което той прави е да провери дали всичко
е наред с хардуера. След това програма, наречена "bootstrap loader" търси boot
sector (сектор за начално зареждане). Boot секторът е първият сектор от твърдия диск
и в него има малка програма, която може да зарежда операционни системи. Тази
програма не може да да бъде по--голяма от 512 байта. Boot секторът може също да се
намира на дискета или CD. Когато bootstrap лоадерът намери boot сектор, го зарежда в
паметта и се изпълнява програмата, която зарежда операционната система. Обикновено
когато на компютъра е инсталиран GNU/Linux, тази програма е \texttt{LILO}
(\textbf{LI}nux \textbf{LO}ader). Debian използва \texttt{LILO}. Освен \texttt{LILO}
можете да използвате и по-малко известният \texttt{grub} (друг лоадер на операционни
системи).

\par
Когато компютърът зареди boot сектор на нормална GNU/Linux система, той всъщност зарежда
част от \texttt{LILO}, наречена "first stage boot loader (първо ниво)". Неговата
работа е да зареди "second stage boot loader (второ ниво)". Второто ниво Ви запитва
каква операционна система искате да се зареди.

\par
Ако изберете Linux, се зарежда ядрото (обикновено \texttt{/vmlinuz}).FIXME! Ядрото
всъщност е самата операционна система. То отговаря за комуникацията на софтуера с
хардуера. Когато ядрото се зареди напълно, първата програма, която изпълнява е
\texttt{/sbin/init}. За повече подробности може да погледнете \man{init}{8} man
страницата. Просто напишете:

\par
\begin{verbatim}
$ man 8 init
\end{verbatim}
или само
\begin{verbatim}
$ man init
\end{verbatim}

\par
Ако обаче не намери \texttt{/sbin/init}, ядрото (говорим за ядра, версия 2.4.x)
търси
\texttt{/etc/init}, \texttt{/bin/init}. Ако и тези не съществуват, ядрото
изпълнява шел \texttt{/bin/sh}. Ако обаче и /bin/sh не съществува, системата не се
стартира, а вместо това виждате следното съобщение: \texttt{"No init found. Try
passing init= option to kernel."}.

\par
Ако получите такова съобщение, можете да стартирате ядрото, задавайки следните
параметри на \texttt{LILO}:

\par
\begin{verbatim}
LILO: Linux init=/bin/bash
\end{verbatim}

\par
По този начин казвате на ядрото да не се изпълнява \texttt{/sbin/init}, а
\texttt{/bin/bash}, което ще Ви осигури шел (shell) веднага след зареждане на
ядорото в паметта. Имайте предвид, че системата няма да се държи както обикновено
(след малко ще разберете защо). Най-простият пример за това е, че не можете да
видите процесите на системата (ако се чудите защо --- защото \texttt{/proc}
файловата система не е монтирана. За да я монтирате просто напишете:

\par
\begin{verbatim}
mount /proc
\end{verbatim}

\par
На практика можете да замените \texttt{/sbin/init} с каквато решите програма, но не
е препоръчително, освен ако \textbf{наистина} знаете какво правите :-).

\par
Работата на \texttt{init} е да прочете файла \texttt{/etc/inittab} и в зависиост от
съдържанието му да изпълни определени скриптове след зареждане на ядрото, наречени
\textbf{rc} скриптове. Те имат за цел да стартират определени услуги (програми) при
стартиране на системата (например графичната среда, уеб сървъра, демона за водене
на отчетни файлове, виртуалните терминали и други) и да ги спират при изключване на
системата. Когато се стартират тези скриптове, системата може да премине в различни
нива (runlevels), а те са: еднопотребителски режим, многопотребителски режим,
спиране на системата или рестартиране. Нивата на изпълнение са описани в
\texttt{/etc/inittab}:

\par
\begin{verbatim}
# Runlevel 0 is halt. (спиране на системата)
# Runlevel 1 is single-user. (еднопотребителски режим)
# Runlevels 2-5 are multi-user. (многопотребителски режим)
# Runlevel 6 is reboot. (рестартиране на системата)
\end{verbatim}

\par
Ако искате да смените режима, в който системата по принцип влиза при стартиране ---
търсете ред в \texttt{/etc/inittab}, подобен на този:

\par
\begin{verbatim}
id:ниво:initdefault:
\end{verbatim}

\par
Стойностите на "ниво" могат да бъдат 1, 2, 3, 4 или 5. В противен случай системата
няма да се стартира.

\par
Еднопотребителският режим е по-специален. Когато системата се стартира в този
режим, тя всъщност поисква паролата на root потребителя и му предоставя шел, ако е
вярна. В този режим не се отварят виртуални терминали и никой друг не може да влезе
в системата. Този режим се използва главно, когато нещо в системата не е наред и
трябва да се оправи.

\par
Когато една Debian система се стартира, тя преминава в runlevel 2
(многопотребителски режим). Тогава се изпълняват скриптовете в директория
\texttt{/etc/rc\textbf{2}.d/}, които пък сами по себе си са символни връзки (за
повече информация прочетете man страницата на \man{ln}{1}) към скриптовете в
\texttt{/etc/init.d/} директорията. В \texttt{/etc/init.d/} се намират всички
\textbf{rc} скриптове. Различните нива имат директории
\texttt{/etc/rc\textbf{ниво}.d/}. Така че, ако искате да промените скриптовете,
които се изпълняват при стартиране на системата --- отивате в директория
\texttt{/etc/rc\textbf{2}.d/}.

\par
За по--любознателните --- кода, който определя коя
програма да се изпълни след зареждане на ядрото, се намира във файла
\texttt{/usr/src/linux/init/main.c} (последните няколко реда).
