TP6 : Construction d’un système d’exploitation Debian Jessie minimal
1. Création d’une machine virtuelle
Que se passe-t-il quand on démarre un ordinateur ?
- Master Boot Record (MBR) :
-
Secteur (une partition) sur le disque dur qui pointe vers le chargeur de démarrage (Grub, Syslinux, celui de Windows, etc…)
- Chargeur de démarrage :
-
Menu qui permet de charger le noyau (Linux, Windows, etc…)
-
On lance un premier programme : le BIOS
- NB: les nouveaux BIOS EFI / UEFI : quasiment des OS à eux seuls
- dans le BIOS : on définit un ensemble de périphériques sur lesquels booter
VS :
Boot EFI :
-
Va chercher, dans un répertoire particulier d’une partition (la partition EFI) prévue à cet effet, le chargeur de démarrage de l’OS
-
Sur un disque dur : va chercher le MBR, qui donne l’adresse du chargeur de démarrage de l’OS
- ex: chargeur de démarrage de l’OS : Grub, Syslinux, …
-
Une fois que le noyau est chargé en mémoire, l’OS est prêt
- Noyau :
-
Ensemble de drivers minimal qui fournit une interface (l’API) entre les programmes utilisés sur l’OS et la couche matérielle/le processeur (entre la couche logicielle et le matériel).
Après le noyau :
- Est chargé : l’init RAM FS
- L’init RAM FS :
- archive qui contient les drivers qui ne sont pas dans le noyau.
- Construit l’arborescence des fichiers, puis cherche les drivers dont on a besoin.
- Charge la swap, les partitions.
- Commence le processus d’amorçage : quels sont les programmes à démarrer et les actions qu’ils doivent faire.
- La swap :
-
Espace d’échange sur le disque pour stocker les données de la mémoire vide quand elle est saturée OU occupée inutilement.
Regarder dans /boot/
: il y a l’init RAM FS, le chargeur de démarrage, les fichiers de configuration.
Pourquoi on n’utilisera pas l’installeur Debian ?
-
car il installe une multitude de choses qui nous seront inutiles. Exs :
- le mail transfert agent (MTA) : Enim ⟶ on peut le désinstaller, mais si on utilise le gestionnaire de packets : tout n’est pas supprimé, notamment les dépendances des bibliothèques jamais utilisées.
- OpenSSH (50Mo) est bien plus lourd que Dropbear (3Mo) : ce dernier est plus pratique pour les systèmes embarqués.
fdisk, parted
: commandes pour partitioner le disque.
cow
: copy on write : on crée des disques virtuels (autant qu’on veut) basés sur un disque réel.
NB : Concernant les architectures des processeurs : attention, on ne peut pas utiliser un disque 64 bits sur une architecture 32bits.
NB:
- Pourquoi “amd64” ? car “amd” étaient les premiers à avoir fait du 64 bits : on a gardé leur nom pour les architectures 64 bits.
- i386 : (“i” pour “intel”, “386” pour l’architecture) en 32bits, est l’architecture la plus “basique”.
-
-boot
:- C : disque dur
- D : CD-Rom
-
enable-kvm
: active l’accélération matérielle- très important
- Partitionnement :
-
À la base, les disques durs sont des “galettes” de silicium où on écrit des 0 et des 1. Les partition sont en un rayon $r$ et $r+r’$ par rapport au centre.
Partitionner un dd, c’est le segmenter en secteurs concentriques par rapport au centre (le dd tourne à 4800/10000/jusqu’à 15000 trs/mn). Dans la table de partitions, qui est au centre du disque, on indique où commencent et finissent les partitions.
- File Systems / Systèmes de fichiers :
-
Ensemble de structures de données structurées d’une certaine façon dont on organise les fichiers.
- ex: c’est comme une carte géographique.
-
ex:
- Microsoft : NTFS, FAT32, FAT16, …
- Apple : HFS, HFS+
-
Linux : ext2, ext3, ext4, XFS, ZFS, BetterFS, ReiserFS, etc…
- ReiserFS : extrêmement performant pour retrouver les petits fichiers
- XFS : pour les gros fichiers
- ext4 : bon compromis, système modulaire
- Sur des bases de données : changement du système de fichier change complètement les performances.
-
Systèmes de fichiers distribués :
-
permet de récupérer la dernière partition de chaque machine dans un réseau, récupère l’espace disque de chaque machine
- ex: GlusterFS
-
NB: il y a énormément de recherche sur les Systèmes de Fichiers.
Fragmentation des fichiers :
- Si on a partition de données, contenant 4 photos.
- Puis : on efface les photos 2 et 3.
-
En vrai : on ne les efface pas, on les dé-référence (le pointeur vers ces photos ne pointe plus vers elles).
-
Donc on peut la récupérer, en cherchant dans le dd, à part si on a remplacé par des 0 et des 1 à l’endroit où elles étaient (“effacement sécurisé”)
-
Effacement sécurisé : fait plusieurs passes :
- écrit d’abord que des 1 sur le fichier effacé
- puis : écrit des 0 et des 1 au hasard
- puis : que des 0
Pourquoi ? Car quand les disques étaient en silicium (pas les disques SSD : que des portes logiques électroniques), on pouvait retrouver l’ancienne valeur écrite (pas assez effacée).
-
-
-
- Puis, on ajoute encore d’autres photos : elles se fragmentent en plusieurs “morceaux” sur le divided_by:
Solutions : système de fichiers journalisés.
-
On cherche le plus grand espace où on peut mettre la photo (avec un algo optimisé), pour minimiser la fragmentation ⟶ c’est le cas sur Linux
- Il n’est pas vrai que Linux ne fragmente PAS, Linux fragmente PEU.
Concrètement, pourquoi il y a fragmentation ?
Car la méthode adoptée pour les stocker est assez gloutonne : les fichiers sont mis le plus près possible du début des partitions, pour y accéder le plus rapidement possible.
Mais quand ils sont trop gros, un morceau est mis au début, l’autre à la fin ⟶ induit un partitionnement.
Partitionnement MS-DOS : il y a 4 partitions primaires maximum (numérotées de 1 à 4). Mais il faut des partitions étendues.
Comment faire pour qu’elles ne se chevauchent pas avec les autres partions ?
Partition étendue : contient d’autres partitions : c’est la dernière. Elle contient des partitions incluses numérotées 5, 6, 7, etc… (jusqu’à 128).
cat /dev/0 > /dev/sda
:
saccage tout le disque.
Mettre le réseau sur la VM
Configurer le fichier systemd
cat <EOF >> /etc/systemd/network/nimportequoi.network
[Match]
Name=eth0
[Network]
DHCP=yes
OU bien :
DHCP=ipv4
OU bien :
DHCP=ipv6
Configuration
L’adresse des DNS est stockée dans /etc/resolv.conf
⟶ on est obligé de le modifier soi-même, avec systemd
systemd-netxorkd
: le service qui démarre le réseau
systemctl start systemd-networkd
:-
démarre le réseau en utilisant
systemd
systemctl start systemd-resolve.conf
:-
génère un fichier
/etc/resolve.conf
, mais pas dans/etc
: il le range dans/run/systemd/resolve/resolv.conf
Donc : créer un lien symbolique de /etc/resolv.conf
vers /run/systemd/resolve/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
PROBLÈME : si on redémarre la machine, il faut refaire un start
!
Pour lui dire le faire à chaque redémarrage de la machine :
systemctl enable systemd-networkd
systemctl enable systemd-resolve.conf
dpkg-reconfigure keyboard-configuration
:-
configure le clavier
MIEUX : avec le paquet console-setup
Commandes utiles
qemu-img -f qcow2 hda.qcow2 5G
Pour se connecter en SSH à la VM
qemu-system-x86_64 -cdrom debian.iso -boot d -enable-kvm -m 4G hda.qcow2
qemu-system-x86_64 -enable-kvm -m 4G /tmp/kaddar/hda.qcow2 -redir tcp:2222::22 -smp cores=4&
Éditer /etc/ssh/sshd_config
, et commenter la ligne :
PermitRootLogin without-password
Juste en dessous, ajouter la ligne :
PermitRootLogin yes
Puis :
ssh root@localhost -p 2222
-
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.10.tar.xz && tar -xvJf linux-4.8.10.tar.xz
-
Copier la config actuelle (dans
/boot/
) dans le répertoire danslinux.../
sous le nom.config
(ou.config-versionDuNoyau
)Puis :
make oldconfig
-
make -j9
(puis éventuellementmake modules -j9
: mais déprécié)Le noyau est :
arch/x86_64/boot/bzImage
-
make modules_install -j9 INSTALL_MOD_PATH=/users/dptinfo/kaddar/shared
Les modules sont dans
users/dptinfo/kaddar/shared
-
copier le noyau et les modules dans la VM
Dans la VM
-
apt-get install gcc, make, wget, libncurses-dev, openssh-server, sshfs
-
mettre le noyau dans
/boot/vmlinuz-versionDuNoyau
(cfversionDuNoyau
dans le répertoire où sont les modules) -
mettre les modules dans
/lib/modules/versionDuNoyau/
PUIS :
- Générer l’initrd :
mkinitramfs
-> crée un fichier /boot/init...
- Faire connaître le noyau au chargeur de noyau : Grub2
update-grub2
:-
update le fichier
/boot/grub/grub.cfg
make menuconfig
:-
les composants qu’on active ou pas : il y a 3 types de composants :
- on ne l’active pas : pas compilé, pas rajouté au noyau
- on l’active dans le noyau : on a les fonctionnalités dans le noyau
- on l’active comme module du noyau (étoiles)
NB : pour pouvoir utiliser les disques SAS, SATA, ou sd…, il faut le module scsi et le module SATA
ldd
:-
liste des bibliothèques sur lesquelles le binaire est linké.
Leave a comment