tuto4 ready
This commit is contained in:
parent
b5de41662b
commit
e928733d61
17 changed files with 789 additions and 203 deletions
|
|
@ -1,5 +1,3 @@
|
|||
\newpage
|
||||
|
||||
Le *namespace* `mount`
|
||||
----------------------
|
||||
|
||||
|
|
@ -20,7 +18,7 @@ montage, récursivement, dès que l'on est entré dans notre nouvel espace de
|
|||
noms.
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
```
|
||||
mount --make-rslave /
|
||||
```
|
||||
</div>
|
||||
|
|
@ -45,7 +43,7 @@ montage virtuels. Le changement de racine sera donc effectif uniquement dans
|
|||
cet espace de noms.
|
||||
|
||||
|
||||
#### L'environnement
|
||||
#### L'environnement\
|
||||
|
||||
Pour pouvoir changer de racine, il est nécessaire que la nouvelle racine soit
|
||||
la racine d'un point de montage, comme l'explique `pivot_root(2)`. En effet, il
|
||||
|
|
@ -55,7 +53,7 @@ ne se trouvait pas à la racine d'une partition au moment du basculement.
|
|||
Si vous n'avez pas de partition à disposition, vous pouvez utiliser un `tmpfs` :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
```
|
||||
42sh# mkdir /mnt/newroot
|
||||
42sh# mount -t tmpfs none /mnt/newroot
|
||||
```
|
||||
|
|
@ -75,7 +73,7 @@ Voici les grandes étapes du changement de racine :
|
|||
3. `pivot_root` !
|
||||
|
||||
|
||||
#### S'isoler
|
||||
#### S'isoler\
|
||||
|
||||
Notre but étant de démonter toutes les partitions superflues, nous allons
|
||||
devoir nous isoler sur :
|
||||
|
|
@ -89,48 +87,54 @@ devoir nous isoler sur :
|
|||
Isolons-nous :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
```
|
||||
42sh# unshare -p -m -f --mount-proc
|
||||
```
|
||||
</div>
|
||||
|
||||
::::: {.warning}
|
||||
|
||||
#### Dissocier la propagation des démontages
|
||||
|
||||
Attention ! avant de pouvoir commencer à démonter les partitions, il faut
|
||||
Avant de pouvoir commencer à démonter les partitions, il faut
|
||||
s'assurer que les démontages ne se propagent pas via une politique de *shared
|
||||
mount*.
|
||||
|
||||
:::::
|
||||
|
||||
|
||||
#### Dissocier la propagation des démontages\
|
||||
|
||||
Commençons donc par étiqueter tous nos points de montage (de ce *namespace*),
|
||||
comme esclaves :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
```
|
||||
42sh# mount --make-rslave /
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
#### Démonter tout !
|
||||
#### Démonter tout !\
|
||||
|
||||
À vous maintenant de démonter vos points d'attache. Il ne devrait vous rester
|
||||
après cette étape que : `/`, `/dev`, `/sys`, `/proc`, `/run` et leurs fils.
|
||||
|
||||
|
||||
#### Switch !
|
||||
#### Switch !\
|
||||
|
||||
À ce stade, dans votre console, vous avez plusieurs solutions : utiliser
|
||||
`switch_root(8)` ou `pivot_root(8)`. La première abstrait plus de choses que la
|
||||
seconde.
|
||||
|
||||
|
||||
##### `switch_root`\
|
||||
##### `switch_root` {-}
|
||||
\
|
||||
|
||||
Cette commande s'occupe de déplacer les partitions restantes pour vous, et lance
|
||||
la première commande (*init*) de votre choix.
|
||||
|
||||
|
||||
##### `pivot_root`\
|
||||
##### `pivot_root` {-}
|
||||
\
|
||||
|
||||
Cette commande, plus proche du fonctionnement de l'appel système
|
||||
`pivot_root(2)`, requiert de notre part que nous ayons préalablement déplacé
|
||||
|
|
@ -147,9 +151,58 @@ Pour lancer la première commande dans la nouvelle racine, on passe généraleme
|
|||
par :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
```
|
||||
42sh# exec chroot / command
|
||||
```
|
||||
</div>
|
||||
|
||||
#### Erreurs courantes {-}
|
||||
\
|
||||
|
||||
Voici une liste des erreurs les plus courantes que vous allez sans doute rencontrer :
|
||||
|
||||
`EINVAL`
|
||||
: - La nouvelle racine n'est pas un point de montage.
|
||||
: - Le chemin où placer l'ancienne racine n'est pas sur la nouvelle racine.
|
||||
: - Le point de montage de la nouvelle ou l'ancienne racine utilise le type de propagation *shared*.
|
||||
|
||||
`EBUSY`
|
||||
: La nouvelle racine ou le chemin où mettre l'ancienne racine se trouve sur la racine actuelle.
|
||||
|
||||
`ENOTDIR`
|
||||
: La nouvelle racine ou le chemin où mettre l'ancienne racine ne sont pas des dossiers.
|
||||
|
||||
`EPERM`
|
||||
: Le processus appelant ne dispose pas de la capability `CAP_SYS_ADMIN`.
|
||||
|
||||
Vous pouvez retrouver toutes les erreurs dans le manuel de `pivot_root(2)`.
|
||||
|
||||
#### Assemblage {-}
|
||||
\
|
||||
|
||||
Vous devriez maintenant pouvoir réaliser un script `myswitch_root.sh` qui
|
||||
enchaîne toutes les étapes précédentes.
|
||||
|
||||
On considère préalablement que l'environnement est propice à la réalisation de ce script :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
42sh# mkdir -p /mnt/newroot
|
||||
42sh# mount -t tmpfs none /mnt/newroot
|
||||
42sh# wget https://dl-cdn.alpinelinux.org/alpine/v3.14/releases/x86_64/alpine-minirootfs-3.14.8-x86_64.tar.gz
|
||||
42sh# tar xpf alpine-minirootfs-*.tar.gz -C /mnt/newroot
|
||||
42sh# cd /
|
||||
```
|
||||
</div>
|
||||
|
||||
Puis on s'attend à le lancer ainsi :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
42sh# ~/myswitch_root.sh /mnt/newroot /bin/bash
|
||||
innewns# _
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
:::::
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue