tuto4 ready
This commit is contained in:
parent
b5de41662b
commit
e928733d61
17 changed files with 789 additions and 203 deletions
|
|
@ -1,71 +1,15 @@
|
|||
\newpage
|
||||
|
||||
### Rejoindre un *namespace*
|
||||
|
||||
Rejoindre un espace de noms se fait en utilisant l'appel système `setns(2)`, ou
|
||||
la commande `nsenter(1)`. Il est nécessaire de donner en argument
|
||||
respectivement un *file descriptor* ou le chemin vers le fichier, lien
|
||||
symbolique, représentant l'espace de nom.
|
||||
symbolique, représentant l'espace de nom (dans `/proc/<PID>/ns/...`).
|
||||
|
||||
|
||||
#### Voir les *namespace*s d'un processus
|
||||
|
||||
Chaque processus lancé est rattaché à une liste d'espaces de nom, y compris
|
||||
s'il est issu du système de base (« l'hôte »).
|
||||
|
||||
Nous pouvons dès lors consulter le dossier `/proc/<PID>/ns/` de chaque
|
||||
processus, pour consulter les différents espaces de nom de nos processus.
|
||||
|
||||
Tous les processus auront la même liste de fichiers, car ils sont liés à un
|
||||
espace de noms par *namespace* utilisable avec le noyau. D'une machine à
|
||||
l'autre, d'une version du noyau à l'autre, il est normal d'avoir une liste de
|
||||
*namespace*s différents, mais d'un processus à l'autre sur le même noyau, nous
|
||||
aurons les mêmes.
|
||||
|
||||
Ces fichiers sont en fait des liens symboliques un peu particuliers, car ils ne
|
||||
pointent pas vers une destination valide :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
42sh$ ls -l /proc/self/ns
|
||||
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 cgroup -> 'cgroup:[4026531835]'
|
||||
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 ipc -> 'ipc:[4026531839]'
|
||||
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 mnt -> 'mnt:[4026531840]'
|
||||
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 net -> 'net:[4026532008]'
|
||||
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 pid -> 'pid:[4026531836]'
|
||||
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 pid_for_children -> 'pid:[4026531836]'
|
||||
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 time -> 'time:[4026531834]'
|
||||
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 time_for_children -> 'time:[4026531834]'
|
||||
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 user -> 'user:[4026531837]'
|
||||
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 uts -> 'uts:[4026531838]'
|
||||
|
||||
```
|
||||
</div>
|
||||
|
||||
Les liens référencent une structure du noyau résidant en mémoire. Les numéros
|
||||
entre crochets seront les mêmes pour deux processus qui partagent le même
|
||||
espace de noms. La structure pointée sera différente si l'espace de nom est
|
||||
différent, donc le numéro sera différent.
|
||||
|
||||
On ne peut pas afficher tel quel les structures, mais on peut l'ouvrir avec
|
||||
`open(2)` pour obtenir un *file descriptor* que l'on pourra passer à
|
||||
`setns(2)`.
|
||||
Une particularité de ces fichiers, que l'on ne peut pas afficher (leurs liens
|
||||
ne pointent pas sur des fichiers que l'on peut atteindre), c'est que l'on peut
|
||||
les ouvrir avec `open(2)` pour obtenir un *file descriptor* que l'on pourra
|
||||
passer à `setns(2)`.
|
||||
|
||||
Pour les commandes *shell*, il convient de donner en argument le chemin vers le
|
||||
lien symbolique : la commande se chargera d'`open(2)` le fichier.
|
||||
|
||||
|
||||
::::: {.question}
|
||||
|
||||
##### `*_for_children` {-}
|
||||
|
||||
Vous avez peut-être remarqué des fichiers `*_for_children` dans le dossier `ns`
|
||||
de vos processus. Nous verrons par la suite que les espaces de noms *PID* et
|
||||
*Time*, une fois créés, ne s'appliquent pas directement au processus en cours
|
||||
d'exécution, la dissociation de *namespace* ne peut se faire que pour les
|
||||
processus/threads fils.
|
||||
|
||||
`pid_for_children` et `time_for_children` représentent donc les *namespace*s
|
||||
qui seront attribués aux fils lancés après un `unshare(2)` réussi.
|
||||
|
||||
:::::
|
||||
lien symbolique : la commande se chargera d'`open(2)` le fichier pour obtenir
|
||||
le *file descriptor* nécessaire.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue