evoformations/support/noyau.tex

111 lines
6.8 KiB
TeX
Raw Normal View History

2012-05-21 16:07:10 +02:00
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright (c) 2005 eVoLiX. Tous droits reserves.%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Le noyau Linux}
\subsection{Pr<EFBFBD>sentation}
~\\
Andrew Tanenbaum, professeur, d<>veloppa en 1985 Minix, un syst<73>me d'exploitation minimal inspir<69> du syst<73>me UNIX Time-Sharing System version 7. Destin<69> <20> enseigner le concept des syst<73>mes d'exploitations, Minix fut la source d'inspiration de Linus Torvalds, un <20>tudiant finlandais, qui d<>veloppa un nouveau syst<73>me d'exploitation baptis<69> Linux. Compl<70>tement r<>-<2D>crit (principalement en langage C), Linux fut tout d'abord d<>velopp<70> pour les ordinateurs de type i386. Linus Torvalds choisit la licence GPL pour son d<>veloppement et rapidement, gr<67>ce <20> Internet, il re<72>ut l'aide de plusieurs informaticiens. L'explosion des r<>seaux et d'Internet a largement favoris<69> le d<>veloppement collaboratif de Linux, au point que certains le consid<69>rent comme le premier produit d'Internet. Linux est g<>n<EFBFBD>ralement compil<69> avec GCC et plus accompagn<67> d'outils provenant du projet GNU afin de fournir un syst<73>me d'exploitation utilisable. C'est pourquoi on a tendance <20> qualifier ce syst<73>me d'exploitation de "GNU/Linux" \footnote{\url{http://www.gnu.org/gnu/why-gnu-linux.fr.html}} \\
La premi<6D>re version de Linux sortit en 1991, la version 1.0 sortit en 1993 et la version 2.0 sortit en 1996. Aujourd'hui, Linux supporte plusieurs architectures (Alpha, MIPS, SPARC, PPC, ...) et compte plusieurs millions de lignes de code. On peut t<>l<EFBFBD>charger Linux sur le site \url{http://www.kernel.org}. Sa branche stable actuelle est la 2.6.x \\
~\\
x.y.z \\
~\\
x d<>signe la branche (num<75>ro de version majeure), y compl<70>te le num<75>ro de version et z est le num<75>ro de release (c'est-<2D>-dire le nombre de publications de cette version). Si y est pair, il s'agit d'une version stable, si y est impair il s'agit d'une version en cours de d<>veloppement. \\
Depuis la version 2.6.11, la num<75>rotation a un peu chang<6E> avec l'introduction d'un quatri<72>me chiffre indiquant des changements mineurs de versions (quelques patches peu cons<6E>quents). \\
Des suffixes tels que preN ou rcN (pr<70>patches), bkN (snapshots), acN (patches d'Alan Cox) ou mmN (patches d'Andrew Morton) indiquent des versions particuli<6C>res du noyau. \\
On peut conna<6E>tre la version actuelle gr<67>ce <20> la commande \texttt{uname} qui affiche des informations concernant la machine et le syst<73>me d'exploitation sur lequel il est invoqu<71>. \\
~\\
Exemple : \\
\texttt{
\$ uname -r \\
2.6.10-rc2laptop221104} \\
~\\
%Multi-utilisateurs \\
%Principes utilisateurs/groupes \\
%Processus \\
%noyau monolithique != micro noyau \\
%approche modulaire \\
%syst<73>me de fichiers (d<>finitions POSIX d'un fichier) \\
%droits d'acc<63>s \\
%mode User/mode Kernel \\
~\\
Liens:\\
\url{http://www.kernelnewbies.org/}\\
\url{http://www.bertolinux.com/}\\
\subsection{Compilation}
~\\
Sous Debian, le noyau compil<69> se trouve dans le r<>pertoire /boot sous le nom vmlinuz-x.y.z
Les sources du noyau se trouvent dans le r<>pertoire /usr/src/linux-x.y.z (ou kernel-source-x.y.z).
Historiquement on retrouve un lien /usr/src/linux pointant vers le r<>pertoire des sources du noyau.
On trouve <20>galement les modules dans /lib/modules/x.y.z, les ent<6E>tes dans /usr/src et les tables de symboles\footnote{\url{http://www.dirac.org/linux/system.map/}} du noyau dans system.map-x.y.z (souvent dans le r<>pertoire /boot )
~\\
~\\
Une fois l'installation de Linux termin<69>e, on proc<6F>dera <20>ventuellement (surtout sur un serveur) <20> la compilation d'un noyau adapt<70> aux besoins de la machine. On privil<69>giera un noyau d<>barrass<73> des modules inutiles~: toutes les options strictement n<>cessaires devront <20>tre compil<69>es en dur (sauf exception).\\
On va donc r<>cup<75>rer les sources du noyau Linux. la proc<6F>dure la plus classique est de prendre le noyau sur le site officiel \url{http://www.kernel.org/}. On prendra garde <20> bien v<>rifier l'int<6E>grit<69> des sources t<>l<EFBFBD>charg<72>es~: \\
~\\
\begin{verbatim}
$ wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.z.tar.bz2.sign
$ gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E
$ gpg --verify linux-2.6.z.tar.bz2.sign linux-2.6.z.tar.bz2
\end{verbatim}
~\\
La recompilation dite classique d'un noyau consiste <20> v<>rifier les d<>pendances (\texttt{dep}), nettoyer les sources (\texttt{clean}), compiler le noyau en lui-m<>me (\texttt{bzImage}), puis les modules (\texttt{modules}) et les installer (\texttt{modules\_install}) :\\
~\\
\begin{itemize}
\item[\texttt{make dep}] v<>rifie les d<>pendances\\
\item[\texttt{make clean}] fait un peu le m<>nage\\
\item[\texttt{make bzImage}] compile le noyau\\
\item[\texttt{make modules}] compile les modules\\
\end{itemize}
~\\
\textit{makes modules\_install}
~\\
\textit{cp arch/i386/boot/bzImage /boot/vmlinuz-new}\\
Avec Debian, il existe les sources Debian du noyau Linux. Il s'agit des sources originales patch<63>es par Debian. On t<>l<EFBFBD>chargera ces sources gr<67>ce <20> APT~: \\
~\\
\texttt{apt-cache search kernel-source*} \\
~\\
Lorsque l'on veut patcher les sources du noyau, il faudra <20>viter d'appliquer des patches incompatibles. C'est pourquoi il peut <20>tre pr<70>f<EFBFBD>rable de patcher <20> partir des sources originales. Il existe de nombreux patches pour le noyau Linux. Pour un serveur, on s'int<6E>ressera au patches de s<>curit<69> grsecurity\footnote{\url{http://www.grsecurity.net/}} proposant un certain nombre de fonctionnalit<69>s. Voici la proc<6F>dure pour l'installer~: \\
~\\
%http://www.cgsecurity.org/Articles/2-MISC/Protections-2/
~\\
\texttt{\$ tar -jxvf linux-2.6.z.tar.bz2}\\
\texttt{\$ patch -p0 < grsecurity-2.0-2.6.z.patch}\\
~\\
La phase la plus d<>licate est en r<>alit<69> le choix des options du noyau. En effet, il faut lire attentivement les explications de chaque option pour d<>terminer si on doit l'activer pour notre machine. Pour lancer le choix des options du noyau, on fera:\\
~\\
\texttt{cd linux-2.6.z.tar.bz2}\\
\texttt{make menuconfig}\\
~\\
On pourra <20>galement utiliser \texttt{make config} mais son utilisation est moins ais<69>e.
Le choix des options est stock<63> dans le fichier \texttt{.config}.
En cas de changement de sources (par exemple en cas de changement de version du noyau), on peut r<>utiliser ce fichier \texttt{.config} en ne choisissant que les nouvelles options. Pour cela on le transf<73>rera <20> la racine des nouvelles sources et on lancera la commande~:\\
~\\
\texttt{make oldconfig}\\
~\\
~\\
Debian propose des outils pour compiler simplement. La commande \texttt{make-kpkg} permet de construire des paquets Debian contenant un noyau compil<69> pr<70>t <20> <20>tre install<6C>. On proc<6F>dera ainsi :\\
~\\
\texttt{
make-kpkg clean\\
make-kpkg kernel\_image kernel\_headers kernel\_source kernel\_doc\\
dpkg -i ../kernel-*-2.6.z.xxx.deb\\
}
~\\
Les options de \texttt{make-kpkg} permettent de sp<73>cifier un nom particulier pour le noyau (-~-append-to-version), de compiler avec initrd (-~-initrd), de compiler avec des modules (-~-added-modules), etc.
~\\
~\\