Use lang en-US for samples

This commit is contained in:
nemunaire 2017-10-17 08:29:07 +02:00
parent f2f93440a7
commit 13dadd8c59
33 changed files with 318 additions and 0 deletions

View file

@ -77,6 +77,7 @@ Sous Linux, les attributs sont regroupés dans des espaces de noms :
Par exemple, on peut définir un attribut sur un fichier comme cela :
<div lang="en-US">
```shell
42sh$ echo 'Hello World!' > toto
42sh$ setfattr -n user.foo -v bar toto
@ -84,9 +85,11 @@ Par exemple, on peut définir un attribut sur un fichier comme cela :
# file: toto
user.foo="bar"
```
</div>
Encore plus fort, vous pouvez utiliser les ACL POSIX :
<div lang="en-US">
```shell
42sh$ sudo chown root:root toto && sudo chmod o-r toto
42sh$ cat toto
@ -95,17 +98,20 @@ cat: toto: Permission denied
42sh$ cat toto
Hello World!
```
</div>
Bien que les droits UNIX traditionnels ne vous donnent pas accès au fichier,
les ACL POSIX vous autorisent à le lire.
Vous pouvez voir ces attributs avec la commande :
<div lang="en-US">
```shell
42sh$ getfattr -d -m "^system" toto
# file: toto
system.posix_acl_access=0sgAAEAD/////AgAEOgDAEAA/////xAABAD////8=
```
</div>
### `ping`
@ -119,18 +125,22 @@ l'utilisation de cet attribut auquel on accroîtrait l'ensemble des
Si votre distribution profite de ces attributs étendus, vous devriez obtenir :
<div lang="en-US">
```shell
42sh$ getfattr -d -m "^security" $(which ping)
# file: bin/ping
security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA=
```
</div>
Ou, dans sa version plus lisible :
<div lang="en-US">
```shell
42sh$ getcap $(which ping)
/bin/ping = cap_net_raw+ep
```
</div>
## Exercice : visualisateur de capabilities d'un processus
@ -138,6 +148,7 @@ Ou, dans sa version plus lisible :
Écrivons maintenant un programme permettant de voir les *capabilities*
d'un processus :
<div lang="en-US">
```shell
42sh$ ./view_caps 1
cap_user_header_t
@ -165,6 +176,7 @@ permitted: 0xffffffff
CAP_DAC_READ_SEARCH
inheritable: 0x0
```
</div>
Astuces : `capget(2)`, X-macros, ...

View file

@ -22,10 +22,12 @@ En fonction de la configuration de votre système, il est possible que les
pas de dossier `freezer` ou si celui-ci est vide, montez-le en suivant la
procédure suivante :
<div lang="en-US">
```
mkdir /sys/fs/cgroup/freezer/
mount -t cgroup -o freezer none /sys/fs/cgroup/freezer/
```
</div>
Cette dernière commande monte le groupe de processus racine, pour le *cgroup*
freezer. Tous les dossiers contenu dans cette racine sont donc des
@ -40,10 +42,12 @@ groupe.
Pour créer un groupe, il suffit de créer un nouveau dossier dans un groupe
existant, par exemple la racine :
<div lang="en-US">
```
mkdir /sys/fs/cgroup/freezer/virli/
ls /sys/fs/cgroup/freezer/virli/
```
</div>
Nous avons maintenant un nouveau groupe de processus `virli` dans le *cgroup*
Freezer. Comme il s'agit d'une hiérarchie, le groupe `virli` hérite des
@ -60,9 +64,11 @@ PID : `echo $$`.
La liste des processus rattachés à un *cgroup* se trouve dans le fichier `task`
du groupe. Pour ajouter une tâche à ce groupe, cela se passe de cette manière :
<div lang="en-US">
```
echo $PID > /sys/fs/cgroup/freezer/virli/tasks
```
</div>
Il faut ici remplacer `$PID` par le PID du shell que l'on a relevé juste avant.
@ -91,23 +97,29 @@ consulter
Faisons exécuter à notre interpréteur une commande pour voir effectivement
l'exécution s'arrêter. Si vous manquez d'inspiration, utilisez :
<div lang="en-US">
```
for i in $(seq 9999); do echo -n $i; sleep .1; echo -n " - "; sleep .1; done
```
</div>
Maintenant, nous avons donné l'ordre au noyau de ne plus allouer de temps de
calcul à notre shell et ses fils :
<div lang="en-US">
```
echo FROZEN > /sys/fs/cgroup/freezer/virli/freezer.state
```
</div>
À cet instant, vous devriez voir votre compteur s'arrêter. Pour reprendre
l'exécution :
<div lang="en-US">
```
echo THAWED > /sys/fs/cgroup/freezer/virli/freezer.state
```
</div>
## Exercice : script de monitoring
@ -121,16 +133,20 @@ données des statistiques issues des *cgroup*s.
Commençons par lancer le conteneur Docker d'InfluxDB (pour éviter de
l'installer sur notre machine) :
<div lang="en-US">
```shell
docker run -d -p 8086:8086 -p 8083:8083 influxdb
```
</div>
Il nous faut ensuite créer une base de données pour y stocker les métriques,
rendez-vous à <http://localhost:8083/> puis entrez la requête :
<div lang="en-US">
```sql
CREATE DATABASE metrics;
```
</div>
### Monitoring instantané vers la console
@ -157,17 +173,21 @@ par défaut par votre système. Si vous êtes dans ce cas, essayez d'ajouter
Maintenant, envoyons nos données vers la base
<https://docs.influxdata.com/influxdb/v1.0/guides/writing_data/> :
<div lang="en-US">
```
curl -i -XPOST 'http://localhost:8086/write?db=metrics' --data-binary \
"$my_cgroup_name memory.usage_in_bytes=$(cat .../my_cgroup_name/memory.usage_in_bytes)"
```
</div>
Pour vérifier que les données ont bien été ajoutées, nous pouvons effectuer la
requête suivante dans l'interface web d'InfluxDB :
<div lang="en-US">
```sql
SELECT * from "$my_cgroup_name";
```
</div>
### Monitorer davantage de données
@ -195,10 +215,12 @@ privilèges particuliers.
#### Exemple
<div lang="en-US">
```
42sh$ sudo ./monitor_init my_cgroup_name
42sh$ ./monitor my_cgroup_name memhog 500
```
</div>
## Fixer des limites

View file

@ -13,9 +13,11 @@ vu comme étant la racine du système de fichiers. En anglais : *change root*:
Pour se créer un environnement afin de changer notre racine, il va falloir
commencer par créer le dossier de notre nouvelle racine :
<div lang="en-US">
```shell
mkdir newroot
```
</div>
### `busybox`
@ -25,10 +27,12 @@ dynamiques. Il se suffit donc à lui-même dans un chroot (dans lequel on ne peu
pas accéder aux bibliothèques du système, il faudrait toutes les copier à la
main).
<div lang="en-US">
```shell
cp $(which busybox) newroot/
chroot newroot /busybox ash
```
</div>
### `debootstrap`
@ -38,9 +42,11 @@ Debian et ses dérivés. Il permet d'installer dans un dossier (en général, ce
dossier correspond au point de montage de la nouvelle racine choisie par
l'utilisateur lors de l'installation) le système de base.
<div lang="en-US">
```shell
debootstrap jessie newroot/ http://httpredir.debian.org/debian/
```
</div>
`pacstrap` est le programme équivalent pour Archlinux.
@ -50,10 +56,12 @@ debootstrap jessie newroot/ http://httpredir.debian.org/debian/
Les distributions « à l'ancienne » proposent encore de télécharger leur système
de base sous forme de tarball :
<div lang="en-US">
```shell
wget ftp://gentoo.mirrors.ovh.net/gentoo-distfiles/releases/amd64/autobuilds/20160929/stage3-amd64-20160929.tar.bz2
tar xpf stage3-amd64-*.tar.bz2 -C newroot/
```
</div>
L'avantage de télécharger l'archive de Gentoo est que l'on a déjà `gcc` dans un
environnement qui tient dans 300 MB.
@ -63,24 +71,30 @@ environnement qui tient dans 300 MB.
Écrivons maintenant un programme dont le seul but est de s'échaper du `chroot`:
<div lang="en-US">
```shell
make escape
echo bar > ../foo
chroot .
```
</div>
Dans le nouvel environnement, vous ne devriez pas pouvoir faire :
<div lang="en-US">
```shell
cat ../foo
```
</div>
Mais une fois votre programme `escape` exécuté, vous devriez pouvoir !
<div lang="en-US">
```shell
./escape
cat /path/to/foo
```
</div>
## Rendu

View file

@ -9,6 +9,7 @@ Ce TP requiert un noyau Linux, dans sa version 3.8 au minimum. Il doit de plus
être compilé avec les options suivantes (lorsqu'elles sont disponibles pour
votre version) :
<div lang="en-US">
```
General setup --->
[*] Control Group support --->
@ -38,6 +39,7 @@ Device Drivers --->
<M> MAC-VLAN support
<M> Virtual ethernet pair device
```
</div>
### Vérification via `menuconfig`
@ -53,9 +55,11 @@ disponible sur la page d'accueil de <https://kernel.org>.
Dans les sources, on affiche la liste des options avec la commande :
<div lang="en-US">
```shell
make menuconfig
```
</div>
### Vérification via `/boot/config-xxx`
@ -69,6 +73,7 @@ fichiers initial (`initramfs-xxx`) et des symboles de débogage
Ce fichier répertorie toutes les options qui ont été activées. Par rapport à
l'arbre présenté ci-dessus, vous devriez trouver :
<div lang="en-US">
```
CONFIG_CGROUPS=y
CONFIG_CGROUP_FREEZER=y
@ -96,6 +101,7 @@ CONFIG_NETDEVICES=y
CONFIG_MACVLAN=m
CONFIG_VETH=m
```
</div>
### Vérification via `/proc/config.gz`

View file

@ -22,6 +22,7 @@ n'est pas forcément une mauvaise solution.
Réduisez au maximum les capabilities, de telle sorte qu'il ne soit pas possible
de faire un ping dans l'environnement restreint :
<div lang="en-US">
```shell
42sh# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
@ -39,6 +40,7 @@ rtt min/avg/max/mdev = 3.931/3.954/3.978/0.067 ms
bash# ping 8.8.8.8
ping: icmp open socket: Permission denied
```
</div>
Astuces : `prctl(2)`, `capabilities(7)`, `capget(2)`, `capset(2)`, ...

View file

@ -20,8 +20,10 @@ placer à la racine de votre rendu.
Voici une arborescence type :
<div lang="en-US">
```
login_x-TP3/questions.txt
login_x-TP3/mymoulette/README
login_x-TP3/mymoulette/...
```
</div>

View file

@ -10,10 +10,12 @@ unique partant d'une racine[1] et où l'on peut placer au sein de son arborescen
des points de montage. Ainsi, l'utilisateur définit généralement deux points de
montage :
<div lang="en-US">
```
/dev/sda1 on / type ext4 (rw,relatime,data=ordered)
/dev/sda3 on /home type ext4 (rw,relatime,data=ordered)
```
</div>
Dans ce schéma, la racine correspond à la première partition du premier disque,
et les fichiers des utilisateurs sont sur la troisième partition du premier
@ -72,9 +74,11 @@ Après avoir exécuté le script, nous devrions avoir :
Voici un exemple d'utilisation :
<div lang="en-US">
```shell
42sh$ ./rev_kdb_leds.sh input20
```
</div>
### `procinfo`
@ -82,6 +86,7 @@ Voici un exemple d'utilisation :
Explorons le pseudo système de fichiers `/proc` pour écrire un script qui va
afficher des informations sur un processus donné :
<div lang="en-US">
```
42sh$ ./procinfo $$
PID: 4242
@ -117,6 +122,7 @@ pid:[4026531836]
user:[4026531837]
uts:[4026531838]
```
</div>
## Rendu