- Dockerfile 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| corrections | ||
| exercices | ||
| .dockerignore | ||
| .gitignore | ||
| AGENTS.md | ||
| Dockerfile | ||
| LICENSE | ||
| README.md | ||
| VIBE_ISSUES.md | ||
cours-de-linux
Exercices et corrections du module LIN (Système Linux). Le cours lui-même (cours.pdf) n'est pas dans ce dépôt.
exercices/: un dossier par chapitre, un fichier par exercice, solutions en fin de fichier.corrections/: les corrections des Labos du cours.
Où faire les exercices ?
Trois environnements, du plus simple au plus complet :
| Environnement | Pour quoi | Risque pour votre machine |
|---|---|---|
| Conteneur Docker | la ligne de commande, les fichiers, les scripts, apt |
faible, si vous suivez les règles ci-dessous |
| VM (VirtualBox, QEMU...) | tout : démarrage, disques, réseau, systemd, interface graphique | très faible |
| Votre propre machine | seulement les exercices de lecture seule | à éviter pour tout ce qui demande sudo |
Un conteneur n'est pas une VM : il partage le noyau de votre machine, n'a pas de démarrage, et n'a pas de systemd. Il ne remplace donc pas une VM pour les chapitres système. Dans le doute, prenez une VM.
Utiliser Docker
Construire l'image
Une seule fois, depuis la racine du dépôt :
docker build -t cours-linux .
L'image (Debian 13, environ 550 Mo) contient les outils des exercices, et un utilisateur normal etudiant qui peut utiliser sudo sans mot de passe.
Lancer un conteneur
docker run -it --rm --hostname tp -v "$PWD/exercices:/home/etudiant/exercices:ro" cours-linux
-it: un terminal interactif ;--rm: le conteneur est supprimé à la sortie, avec tout ce que vous y avez fait. Pour repartir de zéro, il suffit de le relancer ;-v ...:ro: les énoncés sont visibles dans~/exercices, en lecture seule ;exitouCtrl+Dpour sortir.
Pour garder un conteneur entre deux séances, enlevez --rm et ajoutez --name tp. Pour y revenir : docker start -ai tp. Pour le supprimer : docker rm tp.
Avant un exercice qui installe un paquet, mettez à jour les listes, absentes de l'image :
sudo apt update
Les services
Le conteneur n'a pas systemd : systemctl répond System has not been booted with systemd as init system (PID 1). Can't operate. C'est normal. Quand un exercice a besoin d'un service, démarrez-le à la main :
sudo service ssh start
sudo service cron start
sudo service atd start
sudo service cups start
Ce qu'il ne faut pas faire
Docker protège votre machine à condition de ne pas ouvrir les portes :
- Pas de
--privileged. Le conteneur accède alors aux vrais périphériques : sur la machine de test,sudo fdisk -ly voyait le vrai disque, et une erreur demkfsou deddl'aurait effacé. - Pas de
-v /:/host, ni de montage de votre dossier personnel en écriture :rm -rfdans le conteneur s'appliquerait à vos fichiers. - Pas de
-v /var/run/docker.sock:...: cela revient à donner root sur votre machine. - Pas de
--network host: un service lancé dans le conteneur s'exposerait sur votre réseau.
Attention aussi à ce que le conteneur affiche : lsblk y montre les disques de votre machine, car il lit les informations du noyau partagé. Ils y sont visibles, mais inaccessibles : sans --privileged, /dev ne contient aucun disque.
Enfin, être root dans le conteneur ne donne pas tous les droits : mount -o loop y échoue avec failed to setup loop device. Ces TP se font sur une VM.
Le mode systemd : à réserver à une VM
Certains tutoriels lancent systemd dans un conteneur :
docker run -d --name tp-systemd --privileged --cgroupns=host --tmpfs /run --tmpfs /run/lock \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw --user root cours-linux /sbin/init
docker exec -it -u etudiant tp-systemd bash
docker rm -f tp-systemd
Cela fonctionne (systemctl répond, l'état est degraded à cause d'un module noyau), mais cela utilise --privileged : les disques réels sont accessibles. Ne le faites que dans une VM, jamais sur votre poste. Et systemctl --user n'y fonctionne pas. Pour étudier systemd, une VM est plus simple et plus sûre.
Quel environnement pour quel chapitre ?
| Chapitres | Conteneur | VM nécessaire |
|---|---|---|
| 4, 5 (graphique, applications) | tout | |
| 6 à 11 (fichiers, shell, scripts) | tout | |
| 13 (processus) | exercices 1 à 6 | exercice 7 (systemd) et Labo 13.3 |
| 14 (utilisateurs) | tout | |
| 15 (réseau) | exercices 1, 3, 5, 6 (sudo service ssh start) |
exercices 2 (nmcli) et 4 |
| 16 (paquets) | tout (sudo apt update d'abord) |
|
| 17 (partitions) | exercices 1, 3, 4, 8 | exercices 2, 5, 6, 7 |
| 18 (démarrage) | exercice 1 | le reste |
| 19 (automatisation) | exercices 1, 3, 5 (sudo service cron start), et 4 sauf la partie C : pas de serveur de mail |
exercice 2 |
| 20 (sauvegarde) | exercices 1 à 3, 6 | exercices 4 et 5 |
| 21 (debug) | quiz et études de cas | les TP |
| 22 (impression) | exercices 1, 3, 4 (sudo service cups start) |
exercice 2 (systemctl) |
Sur une VM, prenez un instantané avant les chapitres 17, 18 et 21 : un démarrage cassé se répare alors en une minute.