work on tuto2
This commit is contained in:
parent
2788600d4f
commit
58e541d6ad
|
@ -12,7 +12,7 @@ Comme tout bon ~~paresseux~~ sys. admin qui se respecte, sans plus attendre,
|
|||
vous allez vouloir automatiser toutes ces actions rébarbatives. Comme de très
|
||||
nombreuses personnes sont passées par là avant vous, il existe un grand nombre
|
||||
de solutions pour gérer les configurations d'un parc de machines. Parmi les
|
||||
plus connues, citons : [Puppet](https://puppet.com/),
|
||||
plus connues, citons : [Puppet](https://puppet.com/),
|
||||
[Chef](http://www.chef.io/), [SaltStack](https://saltstack.com/) ou encore
|
||||
[Ansible](https://www.ansible.com/).
|
||||
|
||||
|
@ -23,17 +23,17 @@ Introduction à Ansible
|
|||
Ansible est une solution de gestion de configuration. Basé sur
|
||||
[Python](https://www.python.org/) et
|
||||
[YAML](http://www.yaml.org/spec/1.2/spec.html), sa principale particularité est
|
||||
de ne pas nécessité de daemon sur les machines qu'il va gérer : tout se fait
|
||||
de ne pas nécessité de daemon sur les machines qu'il va gérer : tout se fait
|
||||
exclusivement via SSH, à partir de la machine d'un administrateur, possédant
|
||||
Ansible.
|
||||
|
||||
Son installation est très simple, car les dépendances sont minimes et l'outil
|
||||
n'a pas besoin de base de données pour fonctionner : tout va se faire à partir
|
||||
n'a pas besoin de base de données pour fonctionner : tout va se faire à partir
|
||||
d'une arborescence de fichiers, qui sera gérée par Git.
|
||||
|
||||
Commencez par installer Ansible, sur une machine distincte de la machine
|
||||
virtuelle démarrée : la machine hôte sera parfaitement adaptée à cette tâche,
|
||||
d'autant plus que l'installation de la plate-forme est propre et légère : vous
|
||||
virtuelle démarrée : la machine hôte sera parfaitement adaptée à cette tâche,
|
||||
d'autant plus que l'installation de la plate-forme est propre et légère : vous
|
||||
ne risquez pas de vous retrouver avec une usine à gaz impossible à retirer.
|
||||
|
||||
[Consultez la procédure d'installation pour votre distribution ici](http://docs.ansible.com/ansible/latest/intro_installation.html).
|
||||
|
@ -63,7 +63,7 @@ chose à faire consiste à les inventorier.
|
|||
|
||||
Commençons par créer un répertoire, qui contiendra l'ensemble de nos
|
||||
configurations à destination d'Ansible. Dans ce répertoire, créons un fichier
|
||||
d'inventaires `hosts`, contenant l'IP de notre machine :
|
||||
d'inventaires `hosts`, contenant l'IP de notre machine :
|
||||
|
||||
<div lang="en-US">
|
||||
```yaml
|
||||
|
@ -83,7 +83,7 @@ donner des caractéristiques spécifiques à vos machines.
|
|||
|
||||
### `ping`
|
||||
|
||||
Lancez ensuite la commande suivante :
|
||||
Lancez ensuite la commande suivante :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
|
@ -107,12 +107,12 @@ SSH sur les machines, pour éviter d'avoir à taper le mot de passe à chaque
|
|||
test.
|
||||
|
||||
Si vous avez bien suivi jusqu'ici, vous savez qu'il ne faut pas utiliser le
|
||||
compte `root` directement ! Pas d'inquiétude, tout est prévu dans Ansible :
|
||||
compte `root` directement ! Pas d'inquiétude, tout est prévu dans Ansible :
|
||||
retirer l'option `--user root` si votre nom d'utilisateur local est identique
|
||||
que celui dans la machine virtuelle, ou adaptez l'option en conséquence.
|
||||
|
||||
Et ajoutez les options `--become` et `--ask-become-pass` (utilisez `--sudo` et
|
||||
`--ask-sudo-pass` pour les vieilles versions) :
|
||||
`--ask-sudo-pass` pour les vieilles versions) :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -123,9 +123,9 @@ ansible --inventory-file hosts all -m ping -u bruce --become --ask-become-pass
|
|||
|
||||
### Les modules
|
||||
|
||||
Les modules Ansible ont généralement deux missions distinctes :
|
||||
Les modules Ansible ont généralement deux missions distinctes :
|
||||
|
||||
- récupérer des informations en allant les extraire sur chaque machine ;
|
||||
- récupérer des informations en allant les extraire sur chaque machine ;
|
||||
- pousser des nouvelles informations pour atteindre un état précis.
|
||||
|
||||
Lorsque les informations récupérées montrent que l'état est déjà atteint,
|
||||
|
@ -133,7 +133,7 @@ aucune modification n'est faite sur la machine, on parle d'idempotence.
|
|||
|
||||
À noter cependant que lorsque l'on retire un état de notre recette, il est
|
||||
conservé tel quel sur la machine. Par exemple, si un utilisateur `toto` est
|
||||
créé suite à l'application d'une recette décrivant l'utilisateur `toto` ; si
|
||||
créé suite à l'application d'une recette décrivant l'utilisateur `toto` ; si
|
||||
l'on supprime la description, l'utilisateur ne sera pas supprimé des machines
|
||||
sur lequel la recette aura été appliquée. Pour qu'il soit supprimé, il faut
|
||||
modifier la description pour signaler que cet utilisateur ne doit pas
|
||||
|
@ -144,7 +144,7 @@ trouvé, il sera donc supprimé.
|
|||
### Collecte du mercredi
|
||||
|
||||
Parmi les modules de base, le module `setup` permet de récupérer un grand
|
||||
nombre de caractéristiques de la machine distance, voyez plutôt :
|
||||
nombre de caractéristiques de la machine distance, voyez plutôt :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -165,7 +165,7 @@ Ma première recette
|
|||
Un livre de recettes (*playbook* dans le vocabulaire d'Ansible), regroupe les
|
||||
descriptions des états que l'on souhaite obtenir sur un groupe de machines données.
|
||||
|
||||
Par exemple, voici à quoi pourrait ressembler un tel recueil :
|
||||
Par exemple, voici à quoi pourrait ressembler un tel recueil :
|
||||
|
||||
<div lang="en-US">
|
||||
```yaml
|
||||
|
@ -202,7 +202,7 @@ d'Ansible](http://docs.ansible.com/ansible/latest/playbooks.html).
|
|||
### Exécution d'un *Playbook*
|
||||
|
||||
Placer le contenu dans un fichier YAML, par exemple `playbook.yml`, non loin du
|
||||
fichier `hosts` créé à la section précédentes, puis lancez :
|
||||
fichier `hosts` créé à la section précédentes, puis lancez :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -214,7 +214,7 @@ ansible-playbook -i hosts playbook.yml
|
|||
### Coup de pouce
|
||||
|
||||
Voici à quoi ressemblerait votre premier playbook créant l'utilisateur
|
||||
`adeline` :
|
||||
`adeline` :
|
||||
|
||||
<div lang="en-US">
|
||||
```yaml
|
||||
|
@ -252,7 +252,7 @@ si un changement à eu lieu. Par exemple, nous pourrions déclarer une tâche de
|
|||
redémarrage du serveur web, seulement lorsque sa configuration est mise à
|
||||
jour.
|
||||
|
||||
Pour se faire, il faut ajouter un élément `notify` à sa tâche :
|
||||
Pour se faire, il faut ajouter un élément `notify` à sa tâche :
|
||||
|
||||
<div lang="en-US">
|
||||
```yaml
|
||||
|
@ -263,7 +263,7 @@ Pour se faire, il faut ajouter un élément `notify` à sa tâche :
|
|||
```
|
||||
</div>
|
||||
|
||||
Puis, au même niveau que les *tasks*, on déclare nos *handlers* :
|
||||
Puis, au même niveau que les *tasks*, on déclare nos *handlers* :
|
||||
|
||||
<div lang="en-US">
|
||||
```yaml
|
||||
|
@ -281,9 +281,9 @@ documentation](http://docs.ansible.com/ansible/latest/playbooks_intro.html#handl
|
|||
pour davantage de détails et d'exemples.
|
||||
|
||||
La configuration de votre serveur SSH laisse à désirer. Corriger les problèmes
|
||||
énoncés par ces deux articles :
|
||||
énoncés par ces deux articles :
|
||||
|
||||
- <https://ringyt.wordpress.com/2017/05/23/default-hardened-ssh-server-config/> ;
|
||||
- <https://ringyt.wordpress.com/2017/05/23/default-hardened-ssh-server-config/> ;
|
||||
- <https://stribika.github.io/2015/01/04/secure-secure-shell.html>.
|
||||
|
||||
Mettez en place un *handler* pour relancer votre serveur SSH en cas de
|
||||
|
@ -293,7 +293,7 @@ modification de sa configuration.
|
|||
Les variables
|
||||
-------------
|
||||
|
||||
Les variables peuvent provenir de très nombreux emplacements : définies
|
||||
Les variables peuvent provenir de très nombreux emplacements : définies
|
||||
spécifiquement pour l'hôte, chargées depuis des fichiers lié au groupe auquel
|
||||
appartient la machine, liées à la recette ou à la tâche en cours d'exécution,
|
||||
récupérée par un module (comme le module `setup`).
|
||||
|
@ -323,7 +323,7 @@ datacenter de rattachement, etc.
|
|||
#### Dans un *playbook*
|
||||
|
||||
De la même manière que dans l'inventaire, il est possible de définir des
|
||||
variables dans une recette :
|
||||
variables dans une recette :
|
||||
|
||||
<div lang="en-US">
|
||||
```yaml
|
||||
|
@ -333,7 +333,7 @@ variables dans une recette :
|
|||
```
|
||||
</div>
|
||||
|
||||
Ces variables peuvent être placées dans un fichier, pour plus de lisibilité :
|
||||
Ces variables peuvent être placées dans un fichier, pour plus de lisibilité :
|
||||
|
||||
<div lang="en-US">
|
||||
```yaml
|
||||
|
@ -343,7 +343,7 @@ Ces variables peuvent être placées dans un fichier, pour plus de lisibilité :
|
|||
```
|
||||
</div>
|
||||
|
||||
Le format correspond au sous arbre que l'on pourrait trouver sous `vars` :
|
||||
Le format correspond au sous arbre que l'on pourrait trouver sous `vars` :
|
||||
|
||||
<div lang="en-US">
|
||||
```yaml
|
||||
|
@ -369,10 +369,8 @@ I'm running {{ ansible_system }} {{ ansible_os_family }} on {{ ansible_system_ve
|
|||
</div>
|
||||
|
||||
Ce format est relativement générique. Ainsi, pour accéder aux éléments d'une
|
||||
table de hash/dictionnaire, on utilise le caractère `.` ;
|
||||
|
||||
Les crochets `[x]` sont utilisés principalement pour accéder aux éléments des
|
||||
tableaux :
|
||||
table de hash/dictionnaire, on utilise le caractère `.` ; les crochets `[x]`
|
||||
sont utilisés principalement pour accéder aux éléments des tableaux :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
|
@ -380,7 +378,7 @@ My first nameserver is: {{ ansible_dns.nameservers[0] }}.
|
|||
```
|
||||
</div>
|
||||
|
||||
ou d'un dictionnaire lorsque la clef doit être récupérée d'une variable :
|
||||
ou d'un dictionnaire lorsque la clef doit être récupérée d'une variable :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
|
@ -396,7 +394,7 @@ d'aplatir la liste retournée.
|
|||
#### Dans les recettes
|
||||
|
||||
Au sein même de votre description YAML, vous pouvez utiliser la puissance de
|
||||
Jinja2 :
|
||||
Jinja2 :
|
||||
|
||||
<div lang="en-US">
|
||||
```yaml
|
||||
|
@ -414,7 +412,7 @@ puis celles de `/vars/webservers_Debian.yml` seront chargées dans le contexte.
|
|||
#### Conditions
|
||||
|
||||
Une autre utilisation possible des variables est d'appliquer ou de passer des
|
||||
tâches. Par exemple :
|
||||
tâches. Par exemple :
|
||||
|
||||
<div lang="en-US">
|
||||
```yaml
|
||||
|
|
|
@ -3,32 +3,32 @@
|
|||
Déploiement d'un service via Ansible
|
||||
====================================
|
||||
|
||||
Très bien ! vous semblez avoir compris le fonctionnement de notre
|
||||
Très bien ! vous semblez avoir compris le fonctionnement de notre
|
||||
gestionnaire de configuration.
|
||||
|
||||
Après cet échauffement, vous devriez être prêt à créer un *playbook*
|
||||
dédié à l'installation de [Tiny Tiny RSS](https://tt-rss.org/) :
|
||||
|
||||
![TinyTinyRSS](ttrss.png "Le lecteur de flux RSS : Tiny Tiny RSS")
|
||||
![TinyTinyRSS](ttrss.png "Le lecteur de flux RSS : Tiny Tiny RSS")
|
||||
|
||||
Très utile pour faire de la veille technologique, ce magnifique
|
||||
lecteur de flux RSS vous permettra de ne plus jamais rien manquer !
|
||||
lecteur de flux RSS vous permettra de ne plus jamais rien manquer !
|
||||
|
||||
Vous trouverez la documentation d'installation précise et détaillée
|
||||
à : <https://git.tt-rss.org/fox/tt-rss/wiki/InstallationNotes>.
|
||||
à : <https://git.tt-rss.org/fox/tt-rss/wiki/InstallationNotes>.
|
||||
|
||||
Choisissez judicieusement votre serveur web et votre serveur de base
|
||||
de données ; ceux-ci ne sont pas imposés.
|
||||
de données ; ceux-ci ne sont pas imposés.
|
||||
|
||||
Vous devrez attacher une importance tout particulière à la sécurité de
|
||||
la solution que vous déployez : configurations durcies, utilisateur
|
||||
dédié lorsque c'est possible (pas de `root` !), droits d'accès et
|
||||
la solution que vous déployez : configurations durcies, utilisateur
|
||||
dédié lorsque c'est possible (pas de `root` !), droits d'accès et
|
||||
permissions des répertoires, etc.
|
||||
|
||||
Profitez des [modules de base de
|
||||
données](http://docs.ansible.com/ansible/latest/list_of_database_modules.html)
|
||||
pour l'initialiser correctement. Et bien entendu de l'ensemble des
|
||||
modules décrits dans la documentation standard !
|
||||
modules décrits dans la documentation standard !
|
||||
|
||||
|
||||
## Configurations
|
||||
|
|
|
@ -4,10 +4,10 @@ Mise en place
|
|||
=============
|
||||
|
||||
Pour réaliser ce TP, vous allez avoir besoin de créer une machine virtuelle,
|
||||
possédant les caractéristiques suivantes :
|
||||
possédant les caractéristiques suivantes :
|
||||
|
||||
- 1 disque de quelques Gio ;
|
||||
- 1 lecteur de CD-ROM ;
|
||||
- 1 disque de quelques Gio ;
|
||||
- 1 lecteur de CD-ROM ;
|
||||
- 1 interface réseau `virtio`, sur laquelle il sera possible d'obtenir une IP
|
||||
permettant d'aller sur Internet.
|
||||
|
||||
|
@ -16,8 +16,8 @@ appréciation. L'ISO est réputée supportée par *Hyper-V* (Windows), *qemu*/*K
|
|||
(macOS, Linux, Windows) et VMware (macOS, Windows).
|
||||
|
||||
L'hyperviseur qui vous laissera le plus de liberté (et avec lequel vous pourrez
|
||||
apprendre le plus de choses !) est sans doute *qemu*, sous Linux ; vous pouvez
|
||||
le lancer avec la commande :
|
||||
apprendre le plus de choses !) est sans doute *qemu*, sous Linux ; vous pouvez
|
||||
le lancer avec la commande :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -36,7 +36,7 @@ Vous pouvez télécharger l'ISO du TP depuis
|
|||
<https://adlin.nemunai.re/ressources/tuto2.iso>.
|
||||
|
||||
Cette image contient un système Debian minimaliste, en partie préinstallé afin
|
||||
de vous permettre de commencer à travailler sans plus attendre !
|
||||
de vous permettre de commencer à travailler sans plus attendre !
|
||||
|
||||
|
||||
Gérer le réseau de son hyperviseur
|
||||
|
@ -48,7 +48,7 @@ au moins à un réseau local, pour permettre d'y apporter les mises à jour).
|
|||
La première chose qu'il va falloir faire avec notre hyperviseur, est donc de
|
||||
lui indiquer comment notre machine virtuelle accédera au réseau.
|
||||
|
||||
**Note:** Nous ne présenterons ici que les méthodes qui permettent d'obtenir un
|
||||
**Note :** Nous ne présenterons ici que les méthodes qui permettent d'obtenir un
|
||||
réseau ayant toutes les caractéristiques d'utilisation et de contrôle que l'on
|
||||
pourrait en attendre. Nous ne verrons donc pas le mode `user` de *qemu* par
|
||||
exemple.
|
||||
|
@ -71,12 +71,12 @@ nombre d'interfaces physiques existantes.
|
|||
Concrètement, l'opération est assez fastidieuse à réaliser à la main, car cela
|
||||
demande de détacher le périphérique (via
|
||||
<span lang="en-US">`/sys/bus/pci/devices/0000:03:00.0/driver/unbind`</span>,
|
||||
par exemple pour une carte `enp0s3`) ; avant de l'assigner à notre machine
|
||||
virtuelle :
|
||||
par exemple pour une carte `enp0s3`) ; avant de l'assigner à notre machine
|
||||
virtuelle :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
qemu-system-x86_64 -device pci-assign,host=03:00.0
|
||||
qemu-system-x86_64 [...] -device pci-assign,host=03:00.0
|
||||
```
|
||||
</div>
|
||||
|
||||
|
@ -84,21 +84,21 @@ qemu-system-x86_64 -device pci-assign,host=03:00.0
|
|||
### Interface virtuelle
|
||||
|
||||
On se rend compte que la solution d'avoir une interface physique par machine
|
||||
virtuelle n'est pas bien idéale et devient vite très onéreuse.
|
||||
virtuelle n'est pas bien pérenne et devient vite très onéreuse.
|
||||
|
||||
La solution qui s'offre à nous est donc de virtualiser la carte ethernet :
|
||||
La solution qui s'offre à nous est donc de virtualiser la carte ethernet :
|
||||
notre hyperviseur va alors **émuler** le comportement d'une carte (*qemu* émule
|
||||
des cartes PCI `e1000`, `rtl8139` pour les plus connues) : côté machine
|
||||
virtuelle, l'hyperviseur va communiquer sur le bus PCI, tandis que côté hôte,
|
||||
il va créer une nouvelle interface virtuelle (de type `tap`), se comportant
|
||||
comme un tunnel vers la machine virtuelle.
|
||||
des cartes PCI `e1000` ou `rtl8139` pour les plus connues) : côté machine
|
||||
virtuelle, l'hyperviseur va communiquer sur le bus PCI virtualisé, tandis que
|
||||
côté hôte, il va créer une nouvelle interface virtuelle (de type `tap`), se
|
||||
comportant comme un tunnel vers la machine virtuelle.
|
||||
|
||||
Pour attacher une carte réseau à notre machine virtuelle et créer l'interface
|
||||
correspondante sur l'hôte, ce sera grâce à la commande :
|
||||
correspondante sur l'hôte, ce sera grâce à la commande :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
qemu-system-x86_64 -net nic,model=e1000 -net tap,ifname=tap0,script=no,downscript=no
|
||||
qemu-system-x86_64 [...] -net nic,model=e1000 -net tap,ifname=tap0,script=no,downscript=no
|
||||
```
|
||||
</div>
|
||||
|
||||
|
@ -107,7 +107,7 @@ machines virtuelles, après avoir assigné des IP aux interfaces correspondantes
|
|||
Il faut alors assigner une IP à l'interface de la machine hôte, et à la machine
|
||||
virtuelle.
|
||||
|
||||
Par exemple : nous assignerons `172.23.69.1/31` à l'interface dans notre
|
||||
Par exemple : nous assignerons `172.23.69.1/31` à l'interface dans notre
|
||||
machine virtuelle et `172.23.69.0/31` à l'interface correspondante de
|
||||
l'hôte. Ainsi, l'hôte pourra contacter cette machine virtuelle à
|
||||
`172.23.69.1/31`, et inversement.
|
||||
|
@ -117,11 +117,11 @@ l'hôte. Ainsi, l'hôte pourra contacter cette machine virtuelle à
|
|||
Parmi les périphériques que peut émuler *qemu*, il y a le contrôleur un peu
|
||||
particulier `virtio`. Ce pilote va, conjointement avec un support adapté côté
|
||||
système d'exploitation invité, permettre de se passer de la couche
|
||||
d'émulation : les paquets seront directement envoyés par le système hôte dans un
|
||||
d'émulation : les paquets seront directement envoyés par le système hôte dans un
|
||||
format compréhensible sans effort, par le système invité.
|
||||
|
||||
Ce principe a été introduit par la paravirtualisation (utilisé notamment par
|
||||
Xen) : au moyen d'un noyau spécialement conçu (soit pour être hôte, soit pour
|
||||
Xen) : au moyen d'un noyau spécialement conçu (soit pour être hôte, soit pour
|
||||
être invité), l'hôte et l'invité peuvent communiquer entre-eux directement,
|
||||
sans passer par une couche d'émulation du matériel.
|
||||
|
||||
|
@ -134,7 +134,7 @@ contrôleurs de disques.
|
|||
Un pont réseau va nous permettre de faire communiquer entre-elles plusieurs
|
||||
interfaces (qu'elles soient physiques ou virtuelles).
|
||||
|
||||
Pour créer un nouveau pont, on utilise la commande `ip` comme suit :
|
||||
Pour créer un nouveau pont, on utilise la commande `ip` comme suit :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -145,7 +145,7 @@ ip link add name br0 type bridge
|
|||
où `br0` est le nom que l'on souhaite attribuer à l'interface.
|
||||
|
||||
|
||||
Pour assigner à un pont une interface, on utilise la commande suivante :
|
||||
Pour assigner à un pont une interface, on utilise la commande suivante :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -157,7 +157,7 @@ où `veth0` est le nom de l'interface que l'on souhaite inclure dans le pont
|
|||
`br0`.
|
||||
|
||||
|
||||
Pour consulter la liste des interfaces concentrées par le pont `br0` :
|
||||
Pour consulter la liste des interfaces concentrées par le pont `br0` :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -174,16 +174,16 @@ machine hôte sur ce réseau virtuel.
|
|||
|
||||
Il est tout à fait possible d'ajouter une interface réseau physique à un pont,
|
||||
et c'est sans doute la méthode la plus simple pour que les machines virtuelles
|
||||
puissent accéder à internet : si le réseau local de la machine hôte fourni des
|
||||
puissent accéder à internet : si le réseau local de la machine hôte fourni des
|
||||
adresses IP par DHCP à toute machine rejoignant le réseau.
|
||||
|
||||
|
||||
Lorsque le pont existe, `qemu` peut créer l'interface virtuelle et l'assigner à
|
||||
un pont directement, avec la commande :
|
||||
un pont directement, avec la commande :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
qemu-system-x86_64 -net bridge,br=br0
|
||||
qemu-system-x86_64 [...] -net bridge,br=br0
|
||||
```
|
||||
</div>
|
||||
|
||||
|
@ -191,7 +191,7 @@ qemu-system-x86_64 -net bridge,br=br0
|
|||
### NAT
|
||||
|
||||
Dans certaines situations, il n'est pas aussi simple d'avoir une IP ou de
|
||||
communiquer avec le réseau utilisé par la machine hôte : par exemple, si le
|
||||
communiquer avec le réseau utilisé par la machine hôte : par exemple, si le
|
||||
nombre d'IP disponibles n'est pas suffisant par rapport au nombre de machines
|
||||
que l'on a besoin de créer, ou bien parce que le réseau nécessite d'être
|
||||
authentifié (netsoul, portail captif, ...) et qu'il est difficile ou inadapté
|
||||
|
@ -211,13 +211,22 @@ dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254
|
|||
Afin que les machines virtuelles puissent accéder à Internet, il est nécessaire
|
||||
de faire du NAT.
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
iptables -A POSTROUTING -o wlp3s0 -j MASQUERADE
|
||||
```
|
||||
</div>
|
||||
|
||||
où `wlp3s0` correspond à l'interface de notre route par défaut.
|
||||
|
||||
|
||||
Démarrer la machine virtuelle
|
||||
-----------------------------
|
||||
|
||||
### Ajouter un disque vierge
|
||||
|
||||
Pour réaliser ce TP, nous aurons besoin d'un disque vierge :
|
||||
Pour réaliser ce TP, nous aurons besoin d'un disque vierge :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -225,11 +234,11 @@ qemu-img create -f qcow2 /tmp/disk.qcow2 4G
|
|||
```
|
||||
</div>
|
||||
|
||||
Ce disque sera à attacher à notre machine virtuelle de cette manière :
|
||||
Ce disque sera à attacher à notre machine virtuelle de cette manière :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
qemu-system-x86_64 -drive file=/tmp/disk.qcow2
|
||||
qemu-system-x86_64 [...] -drive file=/tmp/disk.qcow2
|
||||
```
|
||||
</div>
|
||||
|
||||
|
@ -237,11 +246,11 @@ qemu-system-x86_64 -drive file=/tmp/disk.qcow2
|
|||
### Démarrer sur l'ISO
|
||||
|
||||
Tout comme le disque, nous utilisons ici le paramètre `-drive` pour donner un
|
||||
ISO de CD :
|
||||
ISO de CD :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
qemu-system-x86_64 -boot d -drive format=raw,media=cdrom,readonly,file=tuto2.iso
|
||||
qemu-system-x86_64 [...] -boot d -drive format=raw,media=cdrom,readonly,file=tuto2.iso
|
||||
```
|
||||
</div>
|
||||
|
||||
|
@ -267,7 +276,7 @@ mécanismes de découverte automatique permettent à la pile IPv6 de se configur
|
|||
seule.
|
||||
|
||||
Pour dialoguer avec un serveur DHCP, il convient de lancer un client DHCP sur
|
||||
la machine que l'on souhaite configurer : `udhcpc`, `dhcpcd`, `isc-dhcp-client`
|
||||
la machine que l'on souhaite configurer : `udhcpc`, `dhcpcd`, `isc-dhcp-client`
|
||||
(`dhclient`), etc. Généralement, ces clients prennent en argument l'interface
|
||||
réseau à configurer.
|
||||
|
||||
|
@ -275,7 +284,7 @@ réseau à configurer.
|
|||
### Vérification des paramètres IP
|
||||
|
||||
Parmi les configurations généralement effectuées automatiquement par le serveur
|
||||
DHCP, on trouve les éléments suivants :
|
||||
DHCP, on trouve les éléments suivants :
|
||||
|
||||
#### Lien
|
||||
|
||||
|
@ -286,11 +295,11 @@ pouvoir émettre un paquet sur le réseau.
|
|||
```
|
||||
42sh$ ip link
|
||||
1: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
|
||||
^^^^^^^^^^
|
||||
^^^^^^^^^^
|
||||
```
|
||||
</div>
|
||||
|
||||
Manuellement, l'état d'un lien se change avec la commande :
|
||||
Manuellement, l'état d'un lien se change avec la commande :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -302,7 +311,7 @@ ip link set enp3s0 up
|
|||
#### Adresses
|
||||
|
||||
Après avoir reçu la validation (paquet `DHCPACK`) du serveur DHCP, l'IP est
|
||||
définie sur l'interface, via une méthode similaire à la commande :
|
||||
définie sur l'interface, via une méthode similaire à la commande :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -315,7 +324,7 @@ ip address add 192.168.0.42/24 dev enp3s0
|
|||
|
||||
Parmi toutes les informations embarquées dans un paquet DHCP, figure
|
||||
généralement la route par défaut, permettant de localiser la passerelle du
|
||||
réseau : le routeur conduisant généralement à Internet.
|
||||
réseau : le routeur conduisant généralement à Internet.
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
|
@ -326,11 +335,11 @@ default via 192.168.0.254 dev enp3s0
|
|||
</div>
|
||||
|
||||
Sur un réseau IPv6, les routes sont obtenues grâce au *Neighbor Discovery
|
||||
Protocol* : chaque routeur émet à intervalle régulier ou sur sollicitation un
|
||||
Protocol* : chaque routeur émet à intervalle régulier ou sur sollicitation un
|
||||
paquet détaillant ses routes.
|
||||
|
||||
|
||||
Manuellement, on ajoute une route par défaut avec la commande :
|
||||
Manuellement, on ajoute une route par défaut avec la commande :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
@ -348,7 +357,7 @@ La dernière chose que l'on a généralement besoin de configurer pour pouvoir
|
|||
accéder pleinement à Internet, c'est un serveur de noms de domaine.
|
||||
|
||||
Les informations relatives à la résolution de noms sont inscrites dans le
|
||||
fichier `/etc/resolv.conf` :
|
||||
fichier `/etc/resolv.conf` :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
|
|
|
@ -7,7 +7,7 @@ Présentation du système d'information
|
|||
-------------------------------------
|
||||
|
||||
Le système d'information que vous allez avoir à gérer aujourd'hui est très
|
||||
restreint, car il ne se compose que d'une seule machine !
|
||||
restreint, car il ne se compose que d'une seule machine !
|
||||
|
||||
Cette semaine, nous allons installer et configurer de nombreux services sur
|
||||
cette machine.
|
||||
|
@ -17,7 +17,7 @@ minimaliste. Cette image s'occupe de faire le nécessaire pour démarrer le
|
|||
système, sans que vous ayez à réaliser une installation complète, qui est plus
|
||||
longue qu'intéressante. Néanmoins, si vous avez des interrogations au sujet de
|
||||
la manière dont une installation se fait, ou du fonctionnement du bootloader,
|
||||
n'hésitez pas à poser vos questions !
|
||||
n'hésitez pas à poser vos questions !
|
||||
|
||||
|
||||
Accéder à la machine virtuelle
|
||||
|
@ -51,11 +51,11 @@ que vous n'aurez pas démarré dans le mode "disque dur configuré".
|
|||
### Table des partitions
|
||||
|
||||
Si votre disque a fraîchement été créé, celui-ci ne contient encore aucune
|
||||
partition, il ne contient d'ailleurs pas même de table de partitions !
|
||||
partition, il ne contient d'ailleurs pas même de table de partitions !
|
||||
|
||||
Pour éditer (ou créer ...) la table de partitions d'un disque, vous pouvez
|
||||
utiliser les utilitaires `fdisk`, `cfdisk`, `sfdisk`, `parted`, `gdisk`. Chacun
|
||||
de ses programmes prend en argument le disque à modifier :
|
||||
de ses programmes prend en argument le disque à modifier :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
|
@ -66,11 +66,11 @@ cfdisk /dev/sda
|
|||
Le TP ne se concentrant pas sur la phase de démarrage, vous pouvez ignorer les
|
||||
choix de type de tables, de partitions, leurs drapeaux, les étiquettes, etc.
|
||||
|
||||
Assurez-vous de créer au moins deux partitions : la première occupera la
|
||||
Assurez-vous de créer au moins deux partitions : la première occupera la
|
||||
majeure partie de votre disque, tandis que la deuxième peut se limiter à une
|
||||
centaine de MB, pour l'exercice.
|
||||
|
||||
Assurez-vous de bien lire tous les messages d'avertissements ! Il est important
|
||||
Assurez-vous de bien lire tous les messages d'avertissements ! Il est important
|
||||
que vous comprenniez ce que vous faites à ce stade, car cela peut entraîner des
|
||||
pertes de données.
|
||||
|
||||
|
@ -81,14 +81,14 @@ Les partitions sont maintenant créées, mais il n'est pas encore possible de le
|
|||
utiliser telles-quelles. Afin de pouvoir les utiliser, il est d'abord nécessaire
|
||||
de les formater. Linux supporte une grande variété de systèmes de fichiers,
|
||||
chacun ayant des caractéristiques et des usages particuliers. Le système de
|
||||
fichiers « généraliste » est l'*Extended File System* (`ext`),
|
||||
fichiers « généraliste » est l'*Extended File System* (`ext`),
|
||||
|
||||
Durant la phase de formatage, les structures (telles que les tableaux d'inœuds,
|
||||
le journal des transactions, etc. selon les caractéristiques du système de
|
||||
fichiers) seront inscrites sur le disque. Un certain nombre d'en-têtes
|
||||
référençant des pointeurs vers ces structures et autres particularités
|
||||
éventuelles de la partition seront également inscrits. Il n'est à ce stade pas
|
||||
nécessaire de mettre à zéro chaque secteur du disque ; il faut seulement
|
||||
nécessaire de mettre à zéro chaque secteur du disque ; il faut seulement
|
||||
s'assurer d'initialiser les structures qui seront utilisées pour ne pas
|
||||
récupérer de données aléatoires imprévisibles (notamment, le tableau d'inœuds
|
||||
doit se terminer par une entrée `NULL`, qui sera interprété comme une fin de
|
||||
|
@ -120,7 +120,7 @@ Pour formater une partition d'échange, on utilise l'utilitaire `mkswap`.
|
|||
|
||||
#### Montage des partitions annexes
|
||||
|
||||
Automatique ne veut pas dire magique ! Pour chaque partition dont on dispose,
|
||||
Automatique ne veut pas dire magique ! Pour chaque partition dont on dispose,
|
||||
il va falloir indiquer dans le fichier `/etc/fstab` l'emplacement dans
|
||||
l'arborescence où attacher la partition ainsi que quelques autres
|
||||
caractéristiques.
|
||||
|
@ -138,7 +138,7 @@ Notons que le montage des partitions est effectué par le système
|
|||
d'initialisation (un simple appel à la commande `mount -a` ou équivalent). À
|
||||
aucun moment le noyau ne va lire le contenu de ce fichier.
|
||||
|
||||
Voir aussi : `fstab(5)`
|
||||
Voir aussi : `fstab(5)`
|
||||
|
||||
#### Montage de la racine
|
||||
|
||||
|
@ -164,10 +164,10 @@ Maintenant que notre système de fichiers n'est plus en lecture seul, vous allez
|
|||
pouvoir y apporter des modifications. Par exemple pour installer un client
|
||||
DHCP, afin de vous connecter au réseau facilement !
|
||||
|
||||
Deux solutions s'offrent à vous pour rendre persistant votre configuration réseau :
|
||||
Deux solutions s'offrent à vous pour rendre persistant votre configuration réseau :
|
||||
|
||||
- éditer le fichier `/etc/network/interfaces`, en suivant les directives de la
|
||||
[documentation Debian](https://wiki.debian.org/NetworkConfiguration) ;
|
||||
[documentation Debian](https://wiki.debian.org/NetworkConfiguration) ;
|
||||
- éditer le fichier `/etc/systemd/network/50-dhcp.network`, en suivant les
|
||||
directives de
|
||||
[`systemd-networkd`](https://www.freedesktop.org/software/systemd/man/systemd.network.html).
|
||||
|
@ -182,7 +182,7 @@ Se mettre à l'aise
|
|||
Un serveur SSH est déjà installé et configuré pour vous permettre d'avoir une
|
||||
interface plus agréable que celle de votre hyperviseur.
|
||||
|
||||
**Attention :** si votre machine virtuelle est directement connectée au réseau
|
||||
**Attention :** si votre machine virtuelle est directement connectée au réseau
|
||||
local (sans passer par un NAT), n'oubliez pas de modifier le mot de passe
|
||||
`root` pour éviter que n'importe qui sur le réseau local (et ayant accès à ce
|
||||
TP), ne rentre sur votre machine.
|
||||
|
@ -206,26 +206,26 @@ Utilisez `adduser(8)` pour vous créer votre propre compte, et au minimum
|
|||
`passwd(1)` pour lui définir un mot de passe.
|
||||
|
||||
C'est bon, vous pouvez maintenant commencer à utiliser le client SSH de votre
|
||||
choix pour administrer votre machine virtuelle !
|
||||
choix pour administrer votre machine virtuelle !
|
||||
|
||||
|
||||
### `su` -- Switch User
|
||||
|
||||
Mais comment faire des opérations d'administration, avec un simple compte
|
||||
utilisateur ?
|
||||
utilisateur ?
|
||||
|
||||
La commande `su -` permet de changer devenir `root`, moyennant la connaissance
|
||||
du mot de passe du compte. Notez l'option `-` passée à la commande, cela permet
|
||||
La commande `su -` permet de devenir `root`, moyennant la connaissance du mot
|
||||
de passe du compte `root`. Notez l'option `-` passée à la commande, cela permet
|
||||
de réinitialiser l'environnement comme si l'on venait de se connecter en tant
|
||||
que l'utilisateur cible.
|
||||
|
||||
Afin de simplifier les opérations d'administration, une suite de commandes
|
||||
fournies par le paquet `sudo` va devenir votre couteau suisse
|
||||
d'administrateur. Utilisez :
|
||||
d'administrateur. Utilisez :
|
||||
|
||||
- `sudo` : pour exécuter n'importe quelle commande, avec les privilèges
|
||||
administrateur ;
|
||||
- `sudoedit` : pour éditer un fichier avec les droits administrateurs.
|
||||
- `sudo` : pour exécuter n'importe quelle commande, avec les privilèges
|
||||
administrateur ;
|
||||
- `sudoedit` : pour éditer un fichier avec les droits administrateurs.
|
||||
|
||||
Après avoir installé le paquet, vous devrez ajouter les utilisateurs autorisés
|
||||
à se servir de `sudo` dans le groupe `sudo` ou `wheel` (en fonction des
|
||||
|
@ -233,8 +233,8 @@ distributions). Vous pouvez également définir des conditions plus précise en
|
|||
éditant le fichier `/etc/sudoers` (utilisez impérativement `visudo(1)` pour
|
||||
éditer ce fichier).
|
||||
|
||||
**Super astuce !** votre terminal rit encore de vous, affichant `Permission
|
||||
Denied` car vous avez oublié de préfixer votre commande par `sudo` ? essayez :
|
||||
**Super astuce !** votre terminal rit encore de vous, affichant `Permission
|
||||
Denied` car vous avez oublié de préfixer votre commande par `sudo` ? essayez :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
|
@ -244,11 +244,11 @@ sudo !!
|
|||
|
||||
### Top confort dans son coquillage
|
||||
|
||||
Un shell brut de configuration, c'est souvent source d'erreur ! N'hésitez pas à
|
||||
Un shell brut de configuration, c'est souvent source d'erreur ! N'hésitez pas à
|
||||
recopier votre configuration et à changer votre shell (`chsh(1)`) pour vous
|
||||
trouver dans un environnement plus amical !
|
||||
trouver dans un environnement plus amical !
|
||||
|
||||
On évitera toute configuration sur le compte `root`, étant donné qu'il est
|
||||
susceptible d'être utilisé en dernier recours lorsque plus rien ne fonctionne,
|
||||
une configuration basique aura plus de chance de résister. De toute manière,
|
||||
vous n'utiliserez jamais ce compte !
|
||||
vous n'utiliserez jamais ce compte !
|
||||
|
|
Reference in New Issue