2022-04-08 20:39:14 +00:00
|
|
|
|
::::: {.exercice}
|
|
|
|
|
|
|
|
|
|
### Comparaison de *namespace* -- `cmpns.sh`
|
2017-11-09 00:30:41 +00:00
|
|
|
|
|
|
|
|
|
Les *namespaces* d'un programme sont exposés sous forme de liens symboliques
|
|
|
|
|
dans le répertoire `/proc/<PID>/ns/`.
|
|
|
|
|
|
2022-11-11 09:14:16 +00:00
|
|
|
|
Deux programmes qui partagent un même *namespace* auront un lien vers le même
|
|
|
|
|
*inode*.
|
2017-11-09 00:30:41 +00:00
|
|
|
|
|
2022-11-11 09:14:16 +00:00
|
|
|
|
Écrivons un script, `cmpns`, permettant de déterminer si deux programmes
|
|
|
|
|
s'exécutent dans les mêmes *namespaces*. On ignorera les *namespace*s
|
|
|
|
|
`*_for_children`, car ils ne font pas partie du cycle d'exécution que l'on
|
|
|
|
|
cherche à comparer.
|
|
|
|
|
|
|
|
|
|
En shell, vous aurez besoin de `grep(1)` et de `readlink(1)`.
|
2017-11-09 00:30:41 +00:00
|
|
|
|
|
|
|
|
|
|
2021-10-31 19:51:17 +00:00
|
|
|
|
#### Exemples {.unnumbered}
|
2017-11-09 00:30:41 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```
|
2022-11-11 09:14:16 +00:00
|
|
|
|
42sh$ docker run -d influxdb
|
|
|
|
|
42sh$ ./cmpns $(pgrep influxd) $(pgrep init)
|
2017-11-09 00:30:41 +00:00
|
|
|
|
- cgroup: differ
|
|
|
|
|
- ipc: differ
|
|
|
|
|
- mnt: differ
|
|
|
|
|
- net: differ
|
|
|
|
|
- pid: differ
|
2021-10-31 19:51:17 +00:00
|
|
|
|
- time: same
|
2017-11-09 00:30:41 +00:00
|
|
|
|
- user: same
|
|
|
|
|
- uts: same
|
|
|
|
|
```
|
|
|
|
|
</div>
|
2022-05-04 09:18:16 +00:00
|
|
|
|
\
|
2017-11-09 00:30:41 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```
|
2017-11-09 00:30:41 +00:00
|
|
|
|
42sh$ ./cmpns $(pgrep init) self
|
|
|
|
|
- cgroup: same
|
|
|
|
|
- ipc: same
|
|
|
|
|
- mnt: same
|
|
|
|
|
- net: same
|
|
|
|
|
- pid: same
|
2021-10-31 19:51:17 +00:00
|
|
|
|
- time: same
|
2017-11-09 00:30:41 +00:00
|
|
|
|
- user: same
|
|
|
|
|
- uts: same
|
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
2021-09-11 12:41:43 +00:00
|
|
|
|
Ici, `self` fait référence au processus actuellement exécuté (comme il existe
|
|
|
|
|
un dossier `/proc/self/`, vous n'avez pas besoin de gérer de cas particulier
|
2022-02-24 19:43:43 +00:00
|
|
|
|
pour ça !).
|
2017-11-09 00:30:41 +00:00
|
|
|
|
|
2022-02-24 19:43:43 +00:00
|
|
|
|
Et pourquoi pas :
|
2017-11-09 00:30:41 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```
|
2021-09-11 12:41:43 +00:00
|
|
|
|
42sh# unshare -m ./cmpns $$ self
|
2017-11-09 00:30:41 +00:00
|
|
|
|
- cgroup: same
|
|
|
|
|
- ipc: same
|
|
|
|
|
- mnt: differ
|
|
|
|
|
- net: same
|
|
|
|
|
- pid: same
|
2021-10-31 19:51:17 +00:00
|
|
|
|
- time: same
|
2017-11-09 00:30:41 +00:00
|
|
|
|
- user: same
|
|
|
|
|
- uts: same
|
|
|
|
|
```
|
|
|
|
|
</div>
|
2022-04-08 20:39:14 +00:00
|
|
|
|
|
|
|
|
|
:::::
|