Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
elearning:workbooks:docker3:drf00 [2021/11/21 11:32] – created adminelearning:workbooks:docker3:drf00 [2024/02/21 13:42] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2021.01**+Version : **2024.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
Ligne 15: Ligne 15:
     * Présentation des Namespaces     * Présentation des Namespaces
     * Présentation des CGroups     * Présentation des CGroups
-      * LAB #1 - Travailler avec les CGroups +      * LAB #1 - cgroups v1 
-        * 1.1 - Limitation de la Mémoire +        * 1.1 - Préparation 
-        * 1.2 - Le Paquet cgroup-tools +        * 1.2 - Présentation 
-          * La commande cgcreate +        * 1.3 Limitation de la Mémoire 
-          * La Commande cgexec +        1.4 - La Commande cgcreate 
-          * La Commande cgdelete +        1.5 - La Commande cgexec 
-          * Le Fichier /etc/cgconfig.conf+        1.6 - La Commande cgdelete 
 +        1.7 - Le Fichier /etc/cgconfig.conf 
 +        * 1.8 - La Commande cgconfigparser 
 +      * LAB #2 - cgroups v2 
 +        * 2.1 - Préparation 
 +        * 2.2 - Présentation 
 +        * 2.3 - Limitation de la CPU 
 +        * 2.4 - La Commande systemctl set-property
     * Présentation de Linux Containers     * Présentation de Linux Containers
-      * LAB #- Travailler avec LXC +      * LAB #- Travailler avec LXC 
-        * 2.1 - Installation +        * 3.1 - Installation 
-        * 2.2 - Création d'un Conteneur Simple +        * 3.2 - Création d'un Conteneur Simple 
-        * 2.3 - Démarrage d'un Conteneur Simple +        * 3.3 - Démarrage d'un Conteneur Simple 
-        * 2.4 - S'attacher à un Conteneur Simple +        * 3.4 - S'attacher à un Conteneur Simple 
-        * 2.5 - Commandes LXC de Base+        * 3.5 - Commandes LXC de Base
           * La Commande lxc-console           * La Commande lxc-console
           * La Commande lxc-stop           * La Commande lxc-stop
Ligne 36: Ligne 43:
           * La Commande lxc-unfreeze           * La Commande lxc-unfreeze
           * Autres commandes           * Autres commandes
-        * 2.6 - Création d'un Conteneur Non-Privilégié +        * 3.6 - Création d'un Conteneur Éphémère
-          * User Namespaces +
-          * Création d'un Utilisateur Dédié +
-          * Création du Mappage +
-          * Création du Conteneur +
-          * Contrôle du Mappage +
-        * 2.7 - Création d'un Conteneur Éphémère+
           * La Commande lxc-copy           * La Commande lxc-copy
-        * 2.- Sauvegarde des Conteneurs+        * 3.- Sauvegarde des Conteneurs
           * La Commande lxc-snapshot           * La Commande lxc-snapshot
  
Ligne 67: Ligne 68:
 =====Présentation des CGroups===== =====Présentation des CGroups=====
  
-Les Groupes de Contrôles (Control Groups) aussi appelés **CGroups**, sont une nouvelle façon de contrôler et de limiter des ressources. Les groupes de contrôle permettent l'allocation de ressources, même d'une manière dynamique pendant que le système fonctionne, telles le temps processeur, la mémoire système, la bande réseau, ou une combinaison de ces ressources parmi des groupes de tâches (processus) définis par l'utilisateur et exécutés sur un système.+====LAB #1 - cgroups v1====
  
-Les CGroups sont organisés de manière hiérarchique, comme des processus. Par contre, la comparaison entre les deux démontre que tandis que les processus se trouvent dans une arborescence unique descendant tous du processus init et héritant de l'environnement de leurs parents, les CGroups peuvent être multiples donnant lieu à des arborescences ou **hiérarchies** multiples qui héritent de certains attributs de leurs groupes de contrôle parents.+=== 1.1 - Préparation===
  
-Ces hiérarchies multiples et séparés sont necéssaires parce que chaque hiérarchie est attaché à un ou plusieurs sous-système(s) aussi appelés des **Contrôleurs de Ressources** ou simplement des **Contrôleurs**. Les contrôleurs disponibles sont :+Debian 11 utilise cgroups v2 par défault. Pour revenir à l'utilisation de cgroups v1, éditez le fichier **/etc/boot/grub** et ajoutez la directive **systemd.unified_cgroup_hierarchy=0** à la ligne **GRUB_CMDLINE_LINUX_DEFAULT** : 
 + 
 +<code> 
 +root@debian11:~# vi /etc/default/grub 
 +root@debian11:~# cat /etc/default/grub 
 +# If you change this file, run 'update-grub' afterwards to update 
 +# /boot/grub/grub.cfg. 
 +# For full documentation of the options in this file, see: 
 +#   info -f grub -n 'Simple configuration' 
 + 
 +GRUB_DEFAULT=0 
 +GRUB_TIMEOUT=5 
 +GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` 
 +GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.unified_cgroup_hierarchy=0" 
 +GRUB_CMDLINE_LINUX="" 
 + 
 +# Uncomment to enable BadRAM filtering, modify to suit your needs 
 +# This works with Linux (no patch required) and with any kernel that obtains 
 +# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) 
 +#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" 
 + 
 +# Uncomment to disable graphical terminal (grub-pc only) 
 +#GRUB_TERMINAL=console 
 + 
 +# The resolution used on graphical terminal 
 +# note that you can use only modes which your graphic card supports via VBE 
 +# you can see them in real GRUB with the command `vbeinfo' 
 +#GRUB_GFXMODE=640x480 
 + 
 +# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux 
 +#GRUB_DISABLE_LINUX_UUID=true 
 + 
 +# Uncomment to disable generation of recovery mode menu entries 
 +#GRUB_DISABLE_RECOVERY="true" 
 + 
 +# Uncomment to get a beep at grub start 
 +#GRUB_INIT_TUNE="480 440 1" 
 + 
 +root@debian11:~# grub-mkconfig -o /boot/grub/grub.cfg  
 +Generating grub configuration file ... 
 +Found background image: /usr/share/images/desktop-base/desktop-grub.png 
 +Found linux image: /boot/vmlinuz-5.10.0-13-amd64 
 +Found initrd image: /boot/initrd.img-5.10.0-13-amd64 
 +done 
 +</code> 
 + 
 +Redémarrez ensuite votre VM : 
 + 
 +<code> 
 +root@debian11:~# reboot 
 +</code> 
 + 
 +=== 1.2 - Présentation=== 
 + 
 +Les **Groupes de Contrôles** (//Control Groups//) aussi appelés **CGroups**, sont une façon de contrôler et de limiter des ressources. Les groupes de contrôle permettent l'allocation de ressources, même d'une manière dynamique pendant que le système fonctionne, telles le temps processeur, la mémoire système, la bande réseau, ou une combinaison de ces ressources parmi des groupes de tâches (processus) définis par l'utilisateur et exécutés sur un système. 
 + 
 +Les groupes de contrôle sont organisés de manière hiérarchique, comme des processus. Par contre, la comparaison entre les deux démontre que tandis que les processus se trouvent dans une arborescence unique descandant tous du processus init et héritant de l'environnement de leurs parents, les contrôles groupes peuvent être multiples donnant lieu à des arborescences ou **hiérarchies** multiples qui héritent de certains attributs de leurs groupes de contrôle parents. 
 + 
 +Ces hiérarchies multiples et séparés sont necéssaires parce que chaque hiérarchie est attaché à un ou plusieurs **sous-système(s)** aussi appelés des **Contrôleurs de Ressources** ou simplement des **Contrôleurs**. Les contrôleurs disponibles sous Debian 11 sont :
  
   * **blkio** - utilisé pour établir des limites sur l'accès des entrées/sorties à partir et depuis des périphériques blocs,   * **blkio** - utilisé pour établir des limites sur l'accès des entrées/sorties à partir et depuis des périphériques blocs,
   * **cpu** - utilisé pour fournir aux tâches des groupes de contrôle accès au CPU grâce au planificateur,   * **cpu** - utilisé pour fournir aux tâches des groupes de contrôle accès au CPU grâce au planificateur,
   * **cpuacct** - utilisé pour produire des rapports automatiques sur les ressources CPU utilisées par les tâches dans un groupe de contrôle,   * **cpuacct** - utilisé pour produire des rapports automatiques sur les ressources CPU utilisées par les tâches dans un groupe de contrôle,
-  * **cpuset** - utilisé pour assigner des CPU individuels sur un système multicœur et des nœuds de mémoire à des tâches dans un groupe de contrôle,+  * **cpuset** - utilisé pour assigner des CPU individuels sur un système multicoeur et des noeuds de mémoire à des tâches dans un groupe de contrôle,
   * **devices** - utilisé pour autoriser ou pour refuser l'accès des tâches aux périphériques dans un groupe de contrôle,   * **devices** - utilisé pour autoriser ou pour refuser l'accès des tâches aux périphériques dans un groupe de contrôle,
   * **freezer** - utilisé pour suspendre ou pour réactiver les tâches dans un groupe de contrôle,   * **freezer** - utilisé pour suspendre ou pour réactiver les tâches dans un groupe de contrôle,
-  * **memory** - utilisé pour établir les limites d'utilisation de la mémoire par les tâches d'un groupe de contrôle et pour génèrer des rapports automatiques sur les ressources mémoire utilisées par ces tâches, +  * **memory** - utilisé pour établir les limites d'utilisation de la mémoire par les tâches d'un groupe de contrôle et pour génèrer des rapports automatiques sur les ressources rmémoire utilisées par ces tâches, 
-  * **net_cls** - utilisé pour repérer les paquets réseau avec un identifiant de classe (classid) afin de permettre au contrôleur de trafic Linux, **tc**, d'identifier les paquets provenant d'une tâche particulière d'un groupe de contrôle. +  * **net_cls** - utilisé pour repèrer les paquets réseau avec un identifiant de classe (//classid//) afin de permettre au contrôleur de trafic Linux, **tc**,  d'identifier les paquets provenant d'une tâche particulière d'un groupe de contrôle. 
-  * **perf_event** - utilisé pour permettre le monitoring des CGroups avec l'outil perf,+  * **perf_event**  - utilisé pour permettre le monitoring des CGroups avec l'outil perf,
   * **hugetlb** - utilisé pour limiter des ressources sur des pages de mémoire virtuelle de grande taille.   * **hugetlb** - utilisé pour limiter des ressources sur des pages de mémoire virtuelle de grande taille.
  
-Les hiérarchies ont des points de montage dans le répertoire **/sys/fs/cgroup** : +Il est à noter que : 
 + 
 +  * chaque processus du système appartient à un cgroup et seulement à un cgroup à la fois, 
 +  * tous les threads d'un processus appartiennent au même cgroup, 
 +  * à la création d'un processus, celui-ci est mis dans le même cgroup que son processus parent, 
 +  * un processus peut être migré d'un cgroup à un autre cgroup. Par contre, la migration d'un processus n'a pas d'impact sur l'appartenance au cgroup de ses processus fils.  
 + 
 +Commencez par installer le paquet **cgroup-tools** :
  
 <code> <code>
-trainee@debian9:~$ su - +root@debian11:~# apt -y install cgroup-tools
-Mot de passe : fenestros +
-root@debian9:~# ls -l /sys/fs/cgroup+
-total 0 +
-dr-xr-xr-x 2 root root  0 mai   26 08:52 blkio +
-lrwxrwxrwx 1 root root 11 mai   26 08:52 cpu -> cpu,cpuacct +
-lrwxrwxrwx 1 root root 11 mai   26 08:52 cpuacct -> cpu,cpuacct +
-dr-xr-xr-x 2 root root  0 mai   26 08:52 cpu,cpuacct +
-dr-xr-xr-x 2 root root  0 mai   26 08:52 cpuset +
-dr-xr-xr-x 5 root root  0 mai   26 08:52 devices +
-dr-xr-xr-x 2 root root  0 mai   26 08:52 freezer +
-dr-xr-xr-x 2 root root  0 mai   26 08:52 memory +
-lrwxrwxrwx 1 root root 16 mai   26 08:52 net_cls -> net_cls,net_prio +
-dr-xr-xr-x 2 root root  0 mai   26 08:52 net_cls,net_prio +
-lrwxrwxrwx 1 root root 16 mai   26 08:52 net_prio -> net_cls,net_prio +
-dr-xr-xr-x 2 root root  0 mai   26 08:52 perf_event +
-dr-xr-xr-x 5 root root  0 mai   26 08:52 pids +
-dr-xr-xr-x 5 root root  0 mai   26 08:52 systemd+
 </code> </code>
  
-**Systemd** organise les processus dans chaque CGroup. Par exemple tous les processus démarrés par le serveur Apache se trouveront dans le même CGroup, y compris les scripts CGI. Ceci implique que la gestion des ressources en utilisant des hiérarchies est couplé avec l'arborescence des unités de Systemd.+Pour visualiser les hiérarchies, il convient d'utiliser la commande **lssubsys** : 
 + 
 +<code> 
 +root@debian11:~# lssubsys -am 
 +cpuset /sys/fs/cgroup/cpuset 
 +cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct 
 +blkio /sys/fs/cgroup/blkio 
 +memory /sys/fs/cgroup/memory 
 +devices /sys/fs/cgroup/devices 
 +freezer /sys/fs/cgroup/freezer 
 +net_cls,net_prio /sys/fs/cgroup/net_cls,net_prio 
 +perf_event /sys/fs/cgroup/perf_event 
 +hugetlb /sys/fs/cgroup/hugetlb 
 +pids /sys/fs/cgroup/pids 
 +rdma /sys/fs/cgroup/rdma 
 +</code>  
 + 
 +Sous Debian 11, **Systemd** organise les processus dans chaque CGroup. Par exemple tous les processus démarrés par le serveur Apache se trouveront dans le même CGroup, y compris les scripts CGI. Ceci implique que la gestion des ressources en utilisant des hiérarchies est couplé avec l'arborescence des unités de Systemd.
  
 En haut de l'arborescence des unités de Systemd se trouve la tranche root - **-.slice**, dont dépend : En haut de l'arborescence des unités de Systemd se trouve la tranche root - **-.slice**, dont dépend :
Ligne 123: Ligne 189:
  
 <code> <code>
-root@debian9:~# systemctl list-units --type=slice +root@debian11:~# systemctl list-units --type=slice 
-UNIT               LOAD   ACTIVE SUB    DESCRIPTION                                                                                                                       +  UNIT                               LOAD   ACTIVE SUB    DESCRIPTION 
--.slice            loaded active active Root Slice                                                                                                                        +  -.slice                            loaded active active Root Slice 
-system-getty.slice loaded active active system-getty.slice                                                                                                                +  system-getty.slice                 loaded active active system-getty.slice 
-system.slice       loaded active active System Slice                                                                                                                      +  system-lvm2\x2dpvscan.slice        loaded active active system-lvm2\x2dpvscan.slice 
-user-1000.slice    loaded active active User Slice of trainee                                                                                                             +  system-modprobe.slice              loaded active active system-modprobe.slice 
-user-112.slice     loaded active active User Slice of lightdm                                                                                                             +  system-systemd\x2dcryptsetup.slice loaded active active Cryptsetup Units Slice 
-user.slice         loaded active active User and Session Slice                                                                                                           +  system.slice                       loaded active active System Slice 
 +  user-1000.slice                    loaded active active User Slice of UID 1000 
 +  user.slice                         loaded active active User and Session Slice
  
 LOAD   = Reflects whether the unit definition was properly loaded. LOAD   = Reflects whether the unit definition was properly loaded.
 ACTIVE = The high-level unit activation state, i.e. generalization of SUB. ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
 SUB    = The low-level unit activation state, values depend on unit type. SUB    = The low-level unit activation state, values depend on unit type.
- +loaded units listed. Pass --all to see loaded but inactive units, too.
-loaded units listed. Pass --all to see loaded but inactive units, too.+
 To show all installed unit files use 'systemctl list-unit-files'. To show all installed unit files use 'systemctl list-unit-files'.
 </code> </code>
Ligne 143: Ligne 210:
  
 <code> <code>
-root@debian9:~# systemd-cgls+root@debian11:~# systemd-cgls
 Control group /: Control group /:
 -.slice -.slice
-├─user.slice +├─user.slice  
-│ ─user-112.slice +│ ─user-1000.slice  
-│ │ ├─user@112.service +│   ├─user@1000.service  
-│ │ │ ├─dbus.service +│   │ ├─app.slice  
-│ │ │ │ └─539 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation +│   │ │ ├─pulseaudio.service  
-│ │ │ ├─init.scope +│   │ │ │ └─974 /usr/bin/pulseaudio --daemonize=no --log-target=journal 
-│ │ │ │ ├─527 /lib/systemd/systemd --user +│   │ │ ├─pipewire.service  
-│ │ │ │ └─528 (sd-pam) +│   │ │ │ ├─973 /usr/bin/pipewire 
-│ │ │ └─gvfs-daemon.service +│   │ │ │ └─984 /usr/bin/pipewire-media-session 
-│ │ │   └─547 /usr/lib/gvfs/gvfsd +│   │ │ └─dbus.service  
-│ │ └─session-c1.scope +│   │ │   └─982 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only 
-│ │   ├─524 lightdm --session-child 18 21 +│   │ └init.scope  
-│ │   ├─532 /usr/sbin/lightdm-gtk-greeter +│   │   958 /lib/systemd/systemd --user 
-│ │   ├─534 /usr/lib/at-spi2-core/at-spi-bus-launcher --launch-immediately +│   │   └─959 (sd-pam) 
-│ │   541 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3 +│   ├─session-3.scope  
-│ │   543 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-session +│   │ ├─ 993 sshd: trainee [priv] 
-│ └─user-1000.slice +│   │ ├─ 999 sshd: trainee@pts/
-│   ├─session-2.scope +│   │ ├─1000 -bash 
-│   │ ├─668 sshd: trainee [priv] +│   │ ├─1003 su - 
-│   │ ├─679 sshd: trainee@pts/+│   │ ├─1004 -bash 
-│   │ ├─680 -bash +│   │ ├─1010 systemd-cgls 
-│   │ ├─689 su - +│   │ └─1011 less 
-│   │ ├─690 -su +│   └─session-1.scope  
-│   │ ├─708 systemd-cgls +│     578 /bin/login -p -- 
-│   │ └─709 systemd-cgls +│     ├─975 -bash 
-│   └─user@1000.service +│     ├─986 su 
-│     init.scope +│     └─987 -bash 
-│       ├─670 /lib/systemd/systemd --user +├─init.scope 
-│       └─671 (sd-pam) +
-├─init.scope+
 │ └─1 /sbin/init │ └─1 /sbin/init
-└─system.slice +└─system.slice  
-  ├─lightdm.service +  ├─apache2.service  
-  │ ├─410 /usr/sbin/lightdm +  │ ├─595 /usr/sbin/apache2 -k start 
-  │ ├─425 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch +  │ ├─597 /usr/sbin/apache2 -k start 
-  │ └─588 lightdm --session-child 14 21 +  │ └─598 /usr/sbin/apache2 -k start 
-  ├─anacron.service +  ├─systemd-udevd.service  
-lines 1-39+  │ └─317 /lib/systemd/systemd-udevd 
 +  ├─cron.service  
 +  │ └─491 /usr/sbin/cron -
 +  ├─polkit.service  
 +  │ └─495 /usr/libexec/polkitd --no-debug 
 +  ├─rtkit-daemon.service  
 +  │ └─979 /usr/libexec/rtkit-daemon 
 +  ├─auditd.service  
 +  │ └─460 /sbin/auditd 
 +  ├─wpa_supplicant.service  
 +  │ └─498 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant 
 +  ├─ModemManager.service  
 +  │ └─515 /usr/sbin/ModemManager 
 +  ├─inetd.service  
 +  │ └─694 /usr/sbin/inetd 
 +  ├─systemd-journald.service  
 +  │ └─296 /lib/systemd/systemd-journald 
 +  ├─mdmonitor.service  
 +  │ └─432 /sbin/mdadm --monitor --scan 
 +  ├─ssh.service  
 +  │ └─580 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups 
 +lines 1-58 
 +[q]
 </code> </code>
  
 En utilisant Systemd, plusieurs ressources peuvent être limitées : En utilisant Systemd, plusieurs ressources peuvent être limitées :
  
-  * **CPUShares** - par défaut 1024,+  * **CPUShares** - par défault 1024,
   * **MemoryLimit** - limite exprimée en Mo ou en Go. Pas de valeur par défaut,   * **MemoryLimit** - limite exprimée en Mo ou en Go. Pas de valeur par défaut,
   * **BlockIOWeight** - valeur entre 10 et 1000. Pas de valeur par défaut,   * **BlockIOWeight** - valeur entre 10 et 1000. Pas de valeur par défaut,
Ligne 195: Ligne 282:
   * **CPUQuota** - utilisé pour limiter le temps CPU, même quand le système ne fait rien.   * **CPUQuota** - utilisé pour limiter le temps CPU, même quand le système ne fait rien.
  
-<WRAP center round important> +=== 1.- Limitation de la Mémoire===
-**Important** : Consultez le manuel systemd.resource-control(5) pour voir les paramètres CGroup qui peuvent être passés à systemctl. +
-</WRAP> +
- +
-====LAB #1 - Travailler avec les CGroups==== +
- +
-===1.- Limitation de la Mémoire=== +
- +
-Pour travailler avec les CGroups dans Debian 9, il convient d'installer les outils nécessaires : +
- +
-<code> +
-root@debian9:~# apt-get install libcgroup1 cgroup-tools +
-</code>+
  
-Commencez ensuite par créer le script **hello-world.sh** qui servira à générer un processus pour travailler avec les CGroups :+Commencez par créer le script **hello-world.sh** qui servira à générer un processus pour travailler avec les CGroups :
  
 <code> <code>
-root@debian9:~# vi hello-world.sh +root@debian11:~# vi hello-world.sh 
-root@debian9:~# cat hello-world.sh+root@debian11:~# cat hello-world.sh
 #!/bin/bash #!/bin/bash
 while [ 1 ]; do while [ 1 ]; do
- echo "hello world" +        echo "hello world" 
- sleep 60+        sleep 360
 done done
 </code> </code>
Ligne 224: Ligne 299:
  
 <code> <code>
-root@debian9:~# chmod u+x hello-world.sh  +root@debian11:~# chmod u+x hello-world.sh 
-root@debian9:~# ./hello-world.sh  +root@debian11:~# ./hello-world.sh 
-hello world+
 hello world hello world
 ^C ^C
Ligne 234: Ligne 308:
  
 <code> <code>
-root@debian9:~# mkdir /sys/fs/cgroup/memory/helloworld+root@debian11:~# mkdir /sys/fs/cgroup/memory/helloworld
 </code> </code>
  
Ligne 240: Ligne 314:
  
 <code> <code>
-root@debian9:~# echo 40000000 > /sys/fs/cgroup/memory/helloworld/memory.limit_in_bytes +root@debian11:~# echo 40000000 > /sys/fs/cgroup/memory/helloworld/memory.limit_in_bytes 
-root@debian9:~# cat /sys/fs/cgroup/memory/helloworld/memory.limit_in_bytes+root@debian11:~# cat /sys/fs/cgroup/memory/helloworld/memory.limit_in_bytes
 39997440 39997440
 </code> </code>
  
-<WRAP center round important>+<WRAP center round important 50% >
 **Important** - Notez que les 40 000 000 demandés sont devenus 39 997 440 ce qui correspond à un nombre entier de pages mémoire du noyau de 4Ko. ( 39 997 440 / 4096 = 9 765 ). **Important** - Notez que les 40 000 000 demandés sont devenus 39 997 440 ce qui correspond à un nombre entier de pages mémoire du noyau de 4Ko. ( 39 997 440 / 4096 = 9 765 ).
 </WRAP> </WRAP>
Ligne 252: Ligne 326:
  
 <code> <code>
-root@debian9:~# ./hello-world.sh & +root@debian11:~# ./hello-world.sh & 
-[1] 1012 +[1] 1073 
-root@debian9:~# hello world+root@debian11:~# hello world 
 +[Entrée]
  
-root@debian9:~# ps aux | grep hello-world +root@debian11:~# ps aux | grep hello-world 
-root      1012  0.0  0.1  11172  2868 pts/0    S    10:24   0:00 /bin/bash ./hello-world.sh +root        1073  0.0  0.0   6756  3100 pts/0    S    06:33   0:00 /bin/bash ./hello-world.sh 
-root      1015  0.0  0.0  12784   968 pts/0    S+   10:25   0:00 grep hello-world+root        1077  0.0  0.0   6180   712 pts/0    R+   06:34   0:00 grep hello-world
 </code> </code>
  
-Notez l'héritage par défaut :+Notez qu'il n'y a pas de limite de la mémoire, ce qui implique l'héritage par défaut :
  
 <code> <code>
-root@debian9:~# ps -ww -o cgroup 1012+root@debian11:~# ps -ww -o cgroup 1073
 CGROUP CGROUP
-6:devices:/user.slice,3:pids:/user.slice/user-1000.slice/session-2.scope,1:name=systemd:/user.slice/user-1000.slice/session-2.scope+8:devices:/user.slice,7:pids:/user.slice/user-1000.slice/session-3.scope,5:memory:/user.slice/user-1000.slice/session-3.scope,1:name=systemd:/user.slice/user-1000.slice/session-3.scope,0::/user.slice/user-1000.slice/session-3.scope
 </code> </code>
  
Ligne 272: Ligne 347:
  
 <code> <code>
-root@debian9:~# echo 1012 > /sys/fs/cgroup/memory/helloworld/cgroup.procs+root@debian11:~# echo 1073 > /sys/fs/cgroup/memory/helloworld/cgroup.procs
 </code> </code>
  
-Notez maintenant l'héritage de la limitation de la mémoire - **2:memory:/helloworld** :+Notez maintenant l'héritage de la limitation de la mémoire - **5:memory:/helloworld** :
  
 <code> <code>
-root@debian9:~# ps -ww -o cgroup 1012+root@debian11:~# ps -ww -o cgroup 1073
 CGROUP CGROUP
-6:devices:/user.slice,3:pids:/user.slice/user-1000.slice/session-2.scope,2:memory:/helloworld,1:name=systemd:/user.slice/user-1000.slice/session-2.scope+8:devices:/user.slice,7:pids:/user.slice/user-1000.slice/session-3.scope,5:memory:/helloworld,1:name=systemd:/user.slice/user-1000.slice/session-3.scope,0::/user.slice/user-1000.slice/session-3.scope
 </code> </code>
  
Ligne 286: Ligne 361:
  
 <code> <code>
-root@debian9:~# cat /sys/fs/cgroup/memory/helloworld/memory.usage_in_bytes +root@debian11:~# cat /sys/fs/cgroup/memory/helloworld/memory.usage_in_bytes 
-319488+274432
 </code> </code>
  
Ligne 293: Ligne 368:
  
 <code> <code>
-root@debian9:~# kill 1012 +root@debian11:~# kill 1073 
-root@debian9:~# ps aux | grep hello-world +root@debian11:~# ps aux | grep hello-world 
-root      1038  0.0  0.0  12784   936 pts/0    S+   10:33   0:00 grep hello-world +root        1086  0.0  0.0   6180   716 pts/0    S+   06:37   0:00 grep hello-world 
-[1]+  Complété              ./hello-world.sh+[1]+  Terminated              ./hello-world.sh
 </code> </code>
  
Ligne 302: Ligne 377:
  
 <code> <code>
-root@debian9:~# mkdir /sys/fs/cgroup/memory/helloworld1 +root@debian11:~# mkdir /sys/fs/cgroup/memory/helloworld1 
-root@debian9:~# echo 6000 > /sys/fs/cgroup/memory/helloworld1/memory.limit_in_bytes +root@debian11:~# echo 6000 > /sys/fs/cgroup/memory/helloworld1/memory.limit_in_bytes 
-root@debian9:~# cat /sys/fs/cgroup/memory/helloworld1/memory.limit_in_bytes+root@debian11:~# cat /sys/fs/cgroup/memory/helloworld1/memory.limit_in_bytes
 4096 4096
 </code> </code>
Ligne 311: Ligne 386:
  
 <code> <code>
-root@debian9:~# ./hello-world.sh & +root@debian11:~# ./hello-world.sh & 
-[1] 1042 +[1] 1089
-root@debian9:~# hello world+
  
-root@debian9:~# echo 1042 > /sys/fs/cgroup/memory/helloworld1/cgroup.procs+root@debian11:~# hello world 
 +[Entrée] 
 + 
 +root@debian11:~# echo 1089 > /sys/fs/cgroup/memory/helloworld1/cgroup.procs
 </code> </code>
  
Ligne 321: Ligne 398:
  
 <code> <code>
-root@debian9:~# hello world +root@debian11:~# ps aux | grep hello-world 
- +root        1100  0.0  0.0   6180   720 pts/0    S+   06:45   0:00 grep hello-world 
-[1]+  Processus arrêté      ./hello-world.sh+[1]+  Killed                  ./hello-world.sh
 </code> </code>
  
-Consultez en suite la fin du fichier **/var/log/messages** :+Notez la trace dans le fichier **/var/log/messages** :
  
 <code> <code>
-root@debian9:~# tail /var/log/messages +root@debian11:~# tail /var/log/messages 
-Jul 28 10:39:26 debian9 kernel: [ 1501.775169]  [<ffffffffabe6253d>] ? __do_page_fault+0x4bd/0x4f0 +May  4 06:44:43 debian11 kernel: [  994.012423workingset_nodereclaim 0 
-Jul 28 10:39:26 debian9 kernel: [ 1501.775171 [<ffffffffabfc2950>] ? SyS_brk+0x160/0x180 +May  4 06:44:43 debian11 kernel: [  994.012423pgfault 0 
-Jul 28 10:39:26 debian9 kernel: [ 1501.775175]  [<ffffffffac41a358>] ? page_fault+0x28/0x30 +May  4 06:44:43 debian11 kernel: [  994.012423pgmajfault 0 
-Jul 28 10:39:26 debian9 kernel: [ 1501.775176Task in /helloworld1 killed as a result of limit of /helloworld1 +May  4 06:44:43 debian11 kernel: [  994.012423pgrefill 0 
-Jul 28 10:39:26 debian9 kernel: [ 1501.775180memory: usage 4kB, limit 4kB, failcnt 17 +May  4 06:44:43 debian11 kernel: [  994.012423pgscan 
-Jul 28 10:39:26 debian9 kernel: [ 1501.775180memory+swap: usage 0kB, limit 9007199254740988kB, failcnt +May  4 06:44:43 debian11 kernel: [  994.012423pgsteal 
-Jul 28 10:39:26 debian9 kernel: [ 1501.775181kmem: usage 0kB, limit 9007199254740988kB, failcnt +May  4 06:44:43 debian11 kernel: [  994.012425Tasks state (memory values in pages)
-Jul 28 10:39:26 debian9 kernel: [ 1501.775181Memory cgroup stats for /helloworld1: cache:0KB rss:4KB rss_huge:0KB mapped_file:0KB dirty:0KB writeback:0KB inactive_anon:0KB active_anon:0KB inactive_file:0KB active_file:0KB unevictable:0KB +May  4 06:44:43 debian11 kernel: [  994.012426] [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name 
-Jul 28 10:39:26 debian9 kernel: [ 1501.775188] [ pid ]   uid  tgid total_vm      rss nr_ptes nr_pmds swapents oom_score_adj name +May  4 06:44:43 debian11 kernel: [  994.012428] [   1089]     0  1089     1689      780    53248                    0 hello-world.sh 
-Jul 28 10:39:26 debian9 kernel: [ 1501.775219] [ 1042]     0  1042     2795      732      10                          0 hello-world.sh+May  4 06:44:43 debian11 kernel: [  994.012430] oom-kill:constraint=CONSTRAINT_MEMCG,nodemask=(null),cpuset=/,mems_allowed=0,oom_memcg=/helloworld1,task_memcg=/helloworld1,task=hello-world.sh,pid=1089,uid=0
 </code> </code>
  
-<WRAP center round important> +===1.- La Commande cgcreate===
-**Important** - Notez la trace **Task in /helloworld1 killed as a result of limit of /helloworld1**. +
-</WRAP> +
- +
-===1.Le Paquet cgroup-tools=== +
- +
-Le paquet **cgroup-tools** installe des commandes dites //de facilité// dont : +
- +
-==La commande cgcreate==+
  
 Cette commande permet la création d'un CGroup : Cette commande permet la création d'un CGroup :
  
 <code> <code>
-root@debian9:~# cgcreate -g memory:helloworld2 +root@debian11:~# cgcreate -g memory:helloworld2 
-root@debian9:~# ls -l /sys/fs/cgroup/memory/helloworld2/+ 
 +root@debian11:~# ls -l /sys/fs/cgroup/memory/helloworld2/
 total 0 total 0
--rw-r--r-- 1 root root 0 juil. 28 11:09 cgroup.clone_children +-rw-r--r-- 1 root root 0 May  4 06:47 cgroup.clone_children 
---w--w--w- 1 root root 0 juil. 28 11:09 cgroup.event_control +--w--w--w- 1 root root 0 May  4 06:47 cgroup.event_control 
--rw-r--r-- 1 root root 0 juil. 28 11:09 cgroup.procs +-rw-r--r-- 1 root root 0 May  4 06:47 cgroup.procs 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.failcnt +-rw-r--r-- 1 root root 0 May  4 06:47 memory.failcnt 
---w------- 1 root root 0 juil. 28 11:09 memory.force_empty +--w------- 1 root root 0 May  4 06:47 memory.force_empty 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.kmem.failcnt +-rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.failcnt 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.kmem.limit_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.limit_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.kmem.max_usage_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.max_usage_in_bytes 
--r--r--r-- 1 root root 0 juil. 28 11:09 memory.kmem.slabinfo +-r--r--r-- 1 root root 0 May  4 06:47 memory.kmem.slabinfo 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.kmem.tcp.failcnt +-rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.tcp.failcnt 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.kmem.tcp.limit_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.tcp.limit_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.kmem.tcp.max_usage_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.tcp.max_usage_in_bytes 
--r--r--r-- 1 root root 0 juil. 28 11:09 memory.kmem.tcp.usage_in_bytes +-r--r--r-- 1 root root 0 May  4 06:47 memory.kmem.tcp.usage_in_bytes 
--r--r--r-- 1 root root 0 juil. 28 11:09 memory.kmem.usage_in_bytes +-r--r--r-- 1 root root 0 May  4 06:47 memory.kmem.usage_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.limit_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:47 memory.limit_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.max_usage_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:47 memory.max_usage_in_bytes 
--rw-r--r-- 1 root root 0 juil28 11:09 memory.move_charge_at_immigrate +-rw-r--r-- 1 root root 0 May  4 06:47 memory.memsw.failcnt 
--r--r--r-- 1 root root 0 juil28 11:09 memory.numa_stat +-rw-r--r-- 1 root root 0 May  4 06:47 memory.memsw.limit_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.oom_control +-rw-r--r-- 1 root root 0 May  4 06:47 memory.memsw.max_usage_in_bytes 
----------- 1 root root 0 juil. 28 11:09 memory.pressure_level +-r--r--r-- 1 root root 0 May  4 06:47 memory.memsw.usage_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.soft_limit_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:47 memory.move_charge_at_immigrate 
--r--r--r-- 1 root root 0 juil. 28 11:09 memory.stat +-r--r--r-- 1 root root 0 May  4 06:47 memory.numa_stat 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.swappiness +-rw-r--r-- 1 root root 0 May  4 06:47 memory.oom_control 
--r--r--r-- 1 root root 0 juil. 28 11:09 memory.usage_in_bytes +---------- 1 root root 0 May  4 06:47 memory.pressure_level 
--rw-r--r-- 1 root root 0 juil. 28 11:09 memory.use_hierarchy +-rw-r--r-- 1 root root 0 May  4 06:47 memory.soft_limit_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 11:09 notify_on_release +-r--r--r-- 1 root root 0 May  4 06:47 memory.stat 
--rw-r--r-- 1 root root 0 juil. 28 11:09 tasks+-rw-r--r-- 1 root root 0 May  4 06:47 memory.swappiness 
 +-r--r--r-- 1 root root 0 May  4 06:47 memory.usage_in_bytes 
 +-rw-r--r-- 1 root root 0 May  4 06:47 memory.use_hierarchy 
 +-rw-r--r-- 1 root root 0 May  4 06:47 notify_on_release 
 +-rw-r--r-- 1 root root 0 May  4 06:47 tasks
 </code> </code>
  
Ligne 390: Ligne 464:
  
 <code> <code>
-root@debian9:~# echo 40000000 > /sys/fs/cgroup/memory/helloworld2/memory.limit_in_bytes+root@debian11:~# echo 40000000 > /sys/fs/cgroup/memory/helloworld2/memory.limit_in_bytes
 </code> </code>
  
-==La Commande cgexec==+===1.5 - La Commande cgexec===
  
 Cette commande permet d'insérer la limitation dans le CGroup **et** de lancer le script en une seule ligne : Cette commande permet d'insérer la limitation dans le CGroup **et** de lancer le script en une seule ligne :
  
 <code> <code>
-root@debian9:~# cgexec -g memory:helloworld2 ./hello-world.sh & +root@debian11:~# cgexec -g memory:helloworld2 ./hello-world.sh & 
-[21860 +[11106
-root@debian9:~# hello world+
  
-root@debian9:~#+root@debian11:~# hello world 
 +[Entrée] 
 + 
 +root@debian11:~# cat /sys/fs/cgroup/memory/helloworld2/cgroup.procs  
 +1106 
 +1107 
 +root@debian11:~# ps aux | grep 110 
 +root        1106  0.0  0.0   6756  3060 pts/0    S    06:48   0:00 /bin/bash ./hello-world.sh 
 +root        1107  0.0  0.0   5304   508 pts/0    S    06:48   0:00 sleep 360 
 +root        1108  0.0  0.0      0     0 ?        I    06:49   0:00 [kworker/1:0-events_freezable] 
 +root        1113  0.0  0.0   6180   652 pts/0    S+   06:50   0:00 grep 110
 </code> </code>
  
-== La Commande cgdelete==+===1.6 - La Commande cgdelete==
  
 Une fois le script terminé, cette commande permet de supprimer le cgroup : Une fois le script terminé, cette commande permet de supprimer le cgroup :
  
 <code> <code>
-root@debian9:~# ps aux | grep *.sh +root@debian11:~# kill 1106 
-root      1073  0.0  0.1  11172  2868 pts/0    S    11:18   0:00 /bin/bash ./hello-world.sh +root@debian11:~# ps aux | grep 110 
-root      1076  0.0  0.0    528     4 pts/0    R+   11:18   0:00 grep hello-world.sh +root        1107  0.0  0.0   5304   508 pts/0    S    06:48   0:00 sleep 360 
-root@debian9:~# kill 1073 +root        1108  0.0  0.0          0 ?        I    06:49   0:00 [kworker/1:0-mm_percpu_wq] 
-root@debian9:~# ps aux | grep *.sh +root        1115  0.0  0.0   6180   716 pts/0    R+   06:51   0:00 grep 110 
-root      1078  0.0  0.0  12784   920 pts/0    S+   11:18   0:00 grep hello-world.sh +[1]+  Terminated              cgexec -g memory:helloworld2 ./hello-world.sh 
-[1]+  Complété              cgexec -g memory:helloworld2 ./hello-world.sh + 
-root@debian9:~# cgdelete memory:helloworld2 +root@debian11:~# cgdelete memory:helloworld2 
-root@debian9:~# ls -l /sys/fs/cgroup/memory/helloworld2/ + 
-ls: impossible d'accéder à '/sys/fs/cgroup/memory/helloworld2/': Aucun fichier ou dossier de ce type+root@debian11:~# ls -l /sys/fs/cgroup/memory/helloworld2/ 
 +ls: cannot access '/sys/fs/cgroup/memory/helloworld2/': No such file or directory
 </code> </code>
  
-==Le Fichier /etc/cgconfig.conf==+===1.7 - Le Fichier /etc/cgconfig.conf===
  
-Afin de les rendre persistants, il convient de créer les CGroups dans le fichier **/etc/cgconfig.conf** :+Afin de les rendre persistants, il convient d'éditer le fichier **/etc/cgconfig.conf** :
  
 <code> <code>
-root@debian9:~# vi /etc/cgconfig.conf +root@debian11:~# vi /etc/cgconfig.conf 
-root@debian9:~# cat /etc/cgconfig.conf+root@debian11:~# cat /etc/cgconfig.conf
 group helloworld2 { group helloworld2 {
- cpu { +        cpu { 
- cpu.shares = 100; +                cpu.shares = 100; 
-+        
- memory { +        memory { 
- memory.limit_in_bytes = 40000; +                memory.limit_in_bytes = 40000; 
- }+        }
 } }
 </code> </code>
  
-<WRAP center round important> +<WRAP center round important 50% 
-**Important** - Notez la création de **deux** limitations, une de 40 000 octets de mémoire et l'autre de **100** **cpu.shares**. Cette dernière est une valeur exprimée sur 1 024, où 1 024 représente 100% du temps CPU. La limite fixée est donc equivalente à 9,77% du temps CPU.+**Important** - Notez la création de **deux** limitations, une de 40 000 octets de mémoire et l'autre de **100** **cpu.shares**. Cette dernière est une valeur exprimée sur 1 024, où 1 024 représente 100% du temps CPU. La limite fixée est donc équivalente à 9,77% du temps CPU.
 </WRAP> </WRAP>
  
Ligne 446: Ligne 530:
  
 <code> <code>
-root@debian9:~# cgcreate -g memory:helloworld2 +root@debian11:~# cgcreate -g memory:helloworld2 
-root@debian9:~# ls -l /sys/fs/cgroup/memory/helloworld2/+ 
 +root@debian11:~# ls -l /sys/fs/cgroup/memory/helloworld2/
 total 0 total 0
--rw-r--r-- 1 root root 0 juil. 28 12:47 cgroup.clone_children +-rw-r--r-- 1 root root 0 May  4 06:53 cgroup.clone_children 
---w--w--w- 1 root root 0 juil. 28 12:47 cgroup.event_control +--w--w--w- 1 root root 0 May  4 06:53 cgroup.event_control 
--rw-r--r-- 1 root root 0 juil. 28 12:47 cgroup.procs +-rw-r--r-- 1 root root 0 May  4 06:53 cgroup.procs 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.failcnt +-rw-r--r-- 1 root root 0 May  4 06:53 memory.failcnt 
---w------- 1 root root 0 juil. 28 12:47 memory.force_empty +--w------- 1 root root 0 May  4 06:53 memory.force_empty 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.kmem.failcnt +-rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.failcnt 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.kmem.limit_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.limit_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.kmem.max_usage_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.max_usage_in_bytes 
--r--r--r-- 1 root root 0 juil. 28 12:47 memory.kmem.slabinfo +-r--r--r-- 1 root root 0 May  4 06:53 memory.kmem.slabinfo 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.kmem.tcp.failcnt +-rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.tcp.failcnt 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.kmem.tcp.limit_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.tcp.limit_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.kmem.tcp.max_usage_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.tcp.max_usage_in_bytes 
--r--r--r-- 1 root root 0 juil. 28 12:47 memory.kmem.tcp.usage_in_bytes +-r--r--r-- 1 root root 0 May  4 06:53 memory.kmem.tcp.usage_in_bytes 
--r--r--r-- 1 root root 0 juil. 28 12:47 memory.kmem.usage_in_bytes +-r--r--r-- 1 root root 0 May  4 06:53 memory.kmem.usage_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.limit_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:53 memory.limit_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.max_usage_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:53 memory.max_usage_in_bytes 
--rw-r--r-- 1 root root 0 juil28 12:47 memory.move_charge_at_immigrate +-rw-r--r-- 1 root root 0 May  4 06:53 memory.memsw.failcnt 
--r--r--r-- 1 root root 0 juil28 12:47 memory.numa_stat +-rw-r--r-- 1 root root 0 May  4 06:53 memory.memsw.limit_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.oom_control +-rw-r--r-- 1 root root 0 May  4 06:53 memory.memsw.max_usage_in_bytes 
----------- 1 root root 0 juil. 28 12:47 memory.pressure_level +-r--r--r-- 1 root root 0 May  4 06:53 memory.memsw.usage_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.soft_limit_in_bytes +-rw-r--r-- 1 root root 0 May  4 06:53 memory.move_charge_at_immigrate 
--r--r--r-- 1 root root 0 juil. 28 12:47 memory.stat +-r--r--r-- 1 root root 0 May  4 06:53 memory.numa_stat 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.swappiness +-rw-r--r-- 1 root root 0 May  4 06:53 memory.oom_control 
--r--r--r-- 1 root root 0 juil. 28 12:47 memory.usage_in_bytes +---------- 1 root root 0 May  4 06:53 memory.pressure_level 
--rw-r--r-- 1 root root 0 juil. 28 12:47 memory.use_hierarchy +-rw-r--r-- 1 root root 0 May  4 06:53 memory.soft_limit_in_bytes 
--rw-r--r-- 1 root root 0 juil. 28 12:47 notify_on_release +-r--r--r-- 1 root root 0 May  4 06:53 memory.stat 
--rw-r--r-- 1 root root 0 juil. 28 12:47 tasks+-rw-r--r-- 1 root root 0 May  4 06:53 memory.swappiness 
 +-r--r--r-- 1 root root 0 May  4 06:53 memory.usage_in_bytes 
 +-rw-r--r-- 1 root root 0 May  4 06:53 memory.use_hierarchy 
 +-rw-r--r-- 1 root root 0 May  4 06:53 notify_on_release 
 +-rw-r--r-- 1 root root 0 May  4 06:53 tasks
 </code> </code>
  
 <code> <code>
-root@debian9:~# cgcreate -g cpu:helloworld2 +root@debian11:~# cgcreate -g cpu:helloworld2 
-root@debian9:~# ls -l /sys/fs/cgroup/cpu/helloworld2/+ 
 +root@debian11:~# ls -l /sys/fs/cgroup/cpu/helloworld2/
 total 0 total 0
--rw-r--r-- 1 root root 0 juil. 28 12:48 cgroup.clone_children +-rw-r--r-- 1 root root 0 May  4 06:54 cgroup.clone_children 
--rw-r--r-- 1 root root 0 juil. 28 12:48 cgroup.procs +-rw-r--r-- 1 root root 0 May  4 06:54 cgroup.procs 
--r--r--r-- 1 root root 0 juil. 28 12:48 cpuacct.stat +-r--r--r-- 1 root root 0 May  4 06:54 cpuacct.stat 
--rw-r--r-- 1 root root 0 juil. 28 12:48 cpuacct.usage +-rw-r--r-- 1 root root 0 May  4 06:54 cpuacct.usage 
--r--r--r-- 1 root root 0 juil. 28 12:48 cpuacct.usage_all +-r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_all 
--r--r--r-- 1 root root 0 juil. 28 12:48 cpuacct.usage_percpu +-r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_percpu 
--r--r--r-- 1 root root 0 juil. 28 12:48 cpuacct.usage_percpu_sys +-r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_percpu_sys 
--r--r--r-- 1 root root 0 juil. 28 12:48 cpuacct.usage_percpu_user +-r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_percpu_user 
--r--r--r-- 1 root root 0 juil. 28 12:48 cpuacct.usage_sys +-r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_sys 
--r--r--r-- 1 root root 0 juil. 28 12:48 cpuacct.usage_user +-r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_user 
--rw-r--r-- 1 root root 0 juil. 28 12:48 cpu.cfs_period_us +-rw-r--r-- 1 root root 0 May  4 06:54 cpu.cfs_period_us 
--rw-r--r-- 1 root root 0 juil. 28 12:48 cpu.cfs_quota_us +-rw-r--r-- 1 root root 0 May  4 06:54 cpu.cfs_quota_us 
--rw-r--r-- 1 root root 0 juil. 28 12:48 cpu.shares +-rw-r--r-- 1 root root 0 May  4 06:54 cpu.shares 
--r--r--r-- 1 root root 0 juil. 28 12:48 cpu.stat +-r--r--r-- 1 root root 0 May  4 06:54 cpu.stat 
--rw-r--r-- 1 root root 0 juil. 28 12:48 notify_on_release +-rw-r--r-- 1 root root 0 May  4 06:54 notify_on_release 
--rw-r--r-- 1 root root 0 juil. 28 12:48 tasks+-rw-r--r-- 1 root root 0 May  4 06:54 tasks
 </code> </code>
 +
 +===1.8 - La Commande cgconfigparser===
  
 Appliquez le contenu du fichier **/etc/cgconfig.conf** grâce à l'utilisation de la commande **cgconfigparser** : Appliquez le contenu du fichier **/etc/cgconfig.conf** grâce à l'utilisation de la commande **cgconfigparser** :
  
 <code> <code>
-root@debian9:~# cgconfigparser -l /etc/cgconfig.conf +root@debian11:~# cgconfigparser -l /etc/cgconfig.conf 
-root@debian9:~# cat /sys/fs/cgroup/memory/helloworld2/memory.limit_in_bytes+ 
 +root@debian11:~# cat /sys/fs/cgroup/memory/helloworld2/memory.limit_in_bytes
 36864 36864
-root@debian9:~# cat /sys/fs/cgroup/cpu/helloworld2/cpu.shares+ 
 +root@debian11:~# cat /sys/fs/cgroup/cpu/helloworld2/cpu.shares
 100 100
 </code> </code>
  
-=====Présentation de Linux Containers=====+====LAB #2 - cgroups v2====
  
-====LAB #2 - Travailler avec LXC====+===2.1 Préparation===
  
-===2.- Installation===+Pour revenir à l'utilisation de cgroups v2, éditez le fichier **/etc/boot/grub** et modifiez la directive **systemd.unified_cgroup_hierarchy=0** à **systemd.unified_cgroup_hierarchy=1** dans la ligne **GRUB_CMDLINE_LINUX_DEFAULT** :
  
-Les outils indispensables à l'utilisation des Linux Containers sous Debian sont inclus dans le paquet **lxc** :+<code> 
 +root@debian11:~# vi /etc/default/grub 
 +root@debian11:~# cat /etc/default/grub 
 +# If you change this file, run 'update-grub' afterwards to update 
 +# /boot/grub/grub.cfg. 
 +# For full documentation of the options in this file, see: 
 +#   info -f grub -n 'Simple configuration' 
 + 
 +GRUB_DEFAULT=0 
 +GRUB_TIMEOUT=5 
 +GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian
 +GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.unified_cgroup_hierarchy=1" 
 +GRUB_CMDLINE_LINUX="" 
 + 
 +# Uncomment to enable BadRAM filtering, modify to suit your needs 
 +# This works with Linux (no patch required) and with any kernel that obtains 
 +# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) 
 +#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" 
 + 
 +# Uncomment to disable graphical terminal (grub-pc only) 
 +#GRUB_TERMINAL=console 
 + 
 +# The resolution used on graphical terminal 
 +# note that you can use only modes which your graphic card supports via VBE 
 +# you can see them in real GRUB with the command `vbeinfo' 
 +#GRUB_GFXMODE=640x480 
 + 
 +# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux 
 +#GRUB_DISABLE_LINUX_UUID=true 
 + 
 +# Uncomment to disable generation of recovery mode menu entries 
 +#GRUB_DISABLE_RECOVERY="true" 
 + 
 +# Uncomment to get a beep at grub start 
 +#GRUB_INIT_TUNE="480 440 1" 
 + 
 +root@debian11:~# grub-mkconfig -o /boot/grub/grub.cfg  
 +Generating grub configuration file ... 
 +Found background image: /usr/share/images/desktop-base/desktop-grub.png 
 +Found linux image: /boot/vmlinuz-5.10.0-13-amd64 
 +Found initrd image: /boot/initrd.img-5.10.0-13-amd64 
 +done 
 +</code> 
 + 
 +Redémarrez ensuite votre VM :
  
 <code> <code>
-root@debian9:~# apt update +root@debian11:~# reboot
-root@debian9:~# apt install lxc+
 </code> </code>
  
-L'installation de ce paquet va créer les répertoires **/usr/share/lxc/config** contenant les fichiers de configurations des gabarits ainsi que le répertoire **/usr/share/lxc/templates** contenant fichiers de gabarits pour la création des conteneurs :+===2.2 - Présentation=== 
 + 
 +A l'opposé des cgroups v1, cgroup v2 n'a qu'une seule arborescence ou hiérarchie et donc un seul point de montage. Tous les contrôleurs compatibles v2 qui ne sont pas liés à une hiérarchie v1 sont automatiquement liés à la hiérarchie v2. Un contrôleur inactif dans la hiérarchie v2 peut être lié à un autre hiérarchie. La migration d'un contrôleur d'une hiérarchie à une autre hiérarchie n'est possible que dans le cas où le contrôleur est désactivé et n'est plus référencé dans la hiérarchie d'origine. 
 + 
 +Pour vérifier l'utilisation de cgroups v2, il convient de visualiser le point de montage :
  
 <code> <code>
-root@debian9:~# ls /usr/share/lxc +root@debian11:~# mount -l | grep cgroup 
-config hooks  lxc.functions  lxc-patch.py  __pycache__  selinux  templates +cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)
-root@debian9:~# ls /usr/share/lxc/config +
-alpine.common.conf     centos.userns.conf  debian.userns.conf    gentoo.userns.conf oracle.common.conf slackware.userns.conf   ubuntu-cloud.userns.conf +
-alpine.userns.conf     common.conf    fedora.common.conf    nesting.conf oracle.userns.conf sparclinux.common.conf   ubuntu.common.conf +
-archlinux.common.conf  common.conf.d    fedora.userns.conf    opensuse.common.conf  plamo.common.conf sparclinux.userns.conf   ubuntu.lucid.conf +
-archlinux.userns.conf  common.seccomp    gentoo.common.conf    opensuse.userns.conf  plamo.userns.conf ubuntu-cloud.common.conf  ubuntu.userns.conf +
-centos.common.conf     debian.common.conf  gentoo.moresecure.conf  openwrt.common.conf slackware.common.conf ubuntu-cloud.lucid.conf   userns.conf +
-root@debian9:~# ls /usr/share/lxc/templates +
-lxc-alpine    lxc-archlinux  lxc-centos  lxc-debian    lxc-fedora  lxc-openmandriva  lxc-oracle  lxc-slackware lxc-sshd    lxc-ubuntu-cloud +
-lxc-altlinux  lxc-busybox    lxc-cirros  lxc-download  lxc-gentoo  lxc-opensuse      lxc-plamo lxc-sparclinux  lxc-ubuntu+
 </code> </code>
  
-===2.2 - Création d'un Conteneur Simple===+et de consulter le contenu de ce point de montage :
  
-Créez un conteneur simple en utilisant la commande suivante :+<code> 
 +root@debian11:~# ls -l /sys/fs/cgroup/ 
 +total 0 
 +-r--r--r--  1 root root 0 Jul  6 10:58 cgroup.controllers 
 +-rw-r--r--  1 root root 0 Jul  6 11:32 cgroup.max.depth 
 +-rw-r--r--  1 root root 0 Jul  6 11:32 cgroup.max.descendants 
 +-rw-r--r--  1 root root 0 Jul  6 10:58 cgroup.procs 
 +-r--r--r--  1 root root 0 Jul  6 11:32 cgroup.stat 
 +-rw-r--r--  1 root root 0 Jul  6 10:58 cgroup.subtree_control 
 +-rw-r--r--  1 root root 0 Jul  6 11:32 cgroup.threads 
 +-rw-r--r--  1 root root 0 Jul  6 11:32 cpu.pressure 
 +-r--r--r--  1 root root 0 Jul  6 11:32 cpuset.cpus.effective 
 +-r--r--r--  1 root root 0 Jul  6 11:32 cpuset.mems.effective 
 +-r--r--r--  1 root root 0 Jul  6 11:32 cpu.stat 
 +drwxr-xr-x  2 root root 0 Jul  6 10:58 dev-hugepages.mount 
 +drwxr-xr-x  2 root root 0 Jul  6 10:58 dev-mqueue.mount 
 +drwxr-xr-x  2 root root 0 Jul  6 10:58 init.scope 
 +-rw-r--r--  1 root root 0 Jul  6 11:32 io.cost.model 
 +-rw-r--r--  1 root root 0 Jul  6 11:32 io.cost.qos 
 +-rw-r--r--  1 root root 0 Jul  6 11:32 io.pressure 
 +-r--r--r--  1 root root 0 Jul  6 11:32 io.stat 
 +-r--r--r--  1 root root 0 Jul  6 11:32 memory.numa_stat 
 +-rw-r--r--  1 root root 0 Jul  6 11:32 memory.pressure 
 +-r--r--r--  1 root root 0 Jul  6 11:32 memory.stat 
 +drwxr-xr-x  2 root root 0 Jul  6 10:58 sys-fs-fuse-connections.mount 
 +drwxr-xr-x  2 root root 0 Jul  6 10:58 sys-kernel-config.mount 
 +drwxr-xr-x  2 root root 0 Jul  6 10:58 sys-kernel-debug.mount 
 +drwxr-xr-x  2 root root 0 Jul  6 10:58 sys-kernel-tracing.mount 
 +drwxr-xr-x 23 root root 0 Jul  6 11:26 system.slice 
 +drwxr-xr-x  4 root root 0 Jul  6 11:30 user.slice 
 +</code> 
 + 
 +Dans la version 2 de cgroup, certains noms ont changé par rapport à ceux utilisés dans la version 1 : 
 + 
 +^  Version 1  ^  Version 2  ^ 
 +| CPUShares | CPUWeight | 
 +| StartupCPUShares | StartupCPUWeight | 
 +| MemoryLimit | MemoryMax | 
 + 
 +Commencez par créer le cgroup enfant **pids** dans le cgroup racine :
  
 <code> <code>
-root@debian9:~# lxc-create -n lxc-bb -t busybox +root@debian11:~# mkdir /sys/fs/cgroup/pids
-chmod: impossible d'accéder à '/var/lib/lxc/lxc-bb/rootfs/bin/passwd': Aucun fichier ou dossier de ce type +
-setting root password to "root" +
-Failed to change root password+
 </code> </code>
  
-<WRAP center round important> +Placez le PID du terminal courant dans le fichier **cgroup.procs** du cgroup enfant :
-**Important** - Notez l'utilisation de l'option **-n** qui permet d'associer un nom au conteneur ainsi que l'option **-t** qui indique le gabarit à utiliser. Notez aussi que le gabarit est référencé par le nom du fichier dans le répertoire **/usr/share/lxc/templates** sans son préfix **lxc-**. +
-</WRAP>+
  
-Le **backingstore** (// méthode de stockage//) utilisé par défaut est **dir** ce qui implique que le **rootfs** du conteneur se trouve sur disque dans le répertoire **/var/lib/lxc/** :+<code> 
 +root@debian11:~# echo $$ 
 +1230 
 +root@debian11:~# echo $$ > /sys/fs/cgroup/pids/cgroup.procs 
 +</code> 
 + 
 +Contrôlez maintenant le contenu du fichier cgroup.procs ainsi que le nombre de PIDs dans le cgroup **pids** :
  
 <code> <code>
-root@debian9:~# ls /var/lib/lxc+root@debian11:~# cat /sys/fs/cgroup/pids/cgroup.procs 
-lxc-bb+1230 
 +1281
  
-root@debian9:~# ls /var/lib/lxc/lxc-bb+root@debian11:~# cat /sys/fs/cgroup/pids/pids.current  
-config rootfs+
 +</code>
  
-root@debian9:~# ls /var/lib/lxc/lxc-bb/rootfs +<WRAP center round important 50% > 
-bin  dev  etc  home  lib  lib64  mnt  proc  root  sbin selinux  sys  tmp  usr var+**Important** - Notez que le fichier cgroup.procs contient **deux** PIDs. Le premier est celui du Shell tandis que le deuxième est celui de la commande cat. 
 +</WRAP> 
 + 
 +Injectez maintenant la valeur de **5** dans le fichier **pids.max** du cgroup ** pids** : 
 + 
 +<code> 
 +root@debian11:~# echo 5 > /sys/fs/cgroup/pids/pids.max
 </code> </code>
  
-Il est à noter que LXC peut également utiliser des backingstores de type :+Lancez la commande suivante pour créer 6 pids dans le cgroup :
  
-  * ZFS +<code> 
-  * Brtfs +root@debian11:~# for a in $(seq 1 5); do sleep 60 & done 
-  * LVM +[1] 1290 
-  * Loop +[2] 1291 
-  * rbd (CephFS)+[3] 1292 
 +[4] 1293 
 +-bash: fork: retry: Resource temporarily unavailable 
 +-bash: fork: retry: Resource temporarily unavailable 
 +-bash: fork: retry: Resource temporarily unavailable 
 +-bash: fork: retry: Resource temporarily unavailable 
 +-bash: fork: Resource temporarily unavailable 
 +</code>
  
-===2.3 Démarrage d'un Conteneur Simple===+<WRAP center round important 50% > 
 +**Important** Notez qu'à la tentative de création du 6ème processus, une erreur est retournée. Le système tente ensuite 4 fois de plus puis renonce finalement avec le message d'erreur **-bash: fork: Resource temporarily unavailable**. 
 +</WRAP>
  
-Pour démarrer le conteneuril convient d'utiliser la commande **lxc-start** :+Dernièrementessayez de supprimer le cgroup **pids** :
  
 <code> <code>
-root@debian9:~# lxc-start --name lxc-bb+root@debian11:~# rmdir /sys/fs/cgroup/pids 
 +rmdir: failed to remove '/sys/fs/cgroup/pids': Device or resource busy
 </code> </code>
  
-===2.4 S'attacher à un Conteneur Simple===+<WRAP center round important 50% > 
 +**Important** Notez qu'il n'est pas possible de supprimer un cgroup tant que celui-ci contient un processus. 
 +</WRAP>
  
-Pour s'attacher au conteneur démarré, il convient d'utiliser la commande **lxc-attach** :+Déplacez le processus du terminal courant dans le cgroup racine :
  
 <code> <code>
-root@debian9:~# lxc-attach --name lxc-bb+root@debian11:~# echo $$ > /sys/fs/cgroup/cgroup.procs  
 +</code>
  
 +Il est maintenant possible de supprimer le cgroup **pids** :
  
-BusyBox v1.22.1 (Debian 1:1.22.0-19+b3) built-in shell (ash) +<code> 
-Enter 'help' for a list of built-in commands.+root@debian11:~# rmdir /sys/fs/cgroup/pids 
 +root@debian11:~#  
 +</code>
  
-~ # passwd +===2.3 - Limitation de la CPU===
-/bin/sh: passwd: not found +
-~ # which passwd +
-~ #  +
-</code> +
  
-<WRAP center round important> +Il existe deux façons de limiter les ressources de la CPU :
-**Important** - Notez l'absence de la commande **passwd** dans le conteneur, ce qui explique l'erreur lors de la création de celui-ci. +
-</WRAP>+
  
-Pour sortir du conteneur, il convient d'utiliser la commande **exit** ou bien la combinaison de touches **<Ctrl+d>** :+  * **CPU bandwidth**, 
 +    * un système de limitation basé sur un pourcentage de CPU pour un ou plusieurs processus, 
 +  * **CPU weight**, 
 +    * un système de limitation basé sur la prioritisassion d'un ou de plusieurs processus par rapports aux autres processus. 
 + 
 +Dans l'exemple suivant, vous allez mettre en place une limite de type **CPU bandwidth**. 
 + 
 +Commencez par créer un service appelé **foo** :
  
 <code> <code>
-~ # [Ctrl+d] +root@debian11:~# vi /lib/systemd/system/foo.service 
-~ # root@debian9:~# +root@debian11:~# cat /lib/systemd/system/foo.service 
 +[Unit] 
 +Description=The foo service that does nothing useful 
 +After=remote-fs.target nss-lookup.target 
 + 
 +[Service] 
 +ExecStart=/usr/bin/sha1sum /dev/zero  
 +ExecStop=/bin/kill -WINCH ${MAINPID} 
 + 
 +[Install] 
 +WantedBy=multi-user.target
 </code> </code>
  
-Le fait de sortir du conteneur ne l'arrête pas pour autant, comme il peut être constaté par l'utilisation de la commande **lxc-ls** :+Démarrez et activez le service :
  
 <code> <code>
-~ # root@debian9:~# [Entrée] +root@debian11:~# systemctl start foo.service 
-root@debian9:~# lxc-ls --running +root@debian11:~# systemctl enable foo.service 
-lxc-bb  +Created symlink /etc/systemd/system/multi-user.target.wants/foo.service → /lib/systemd/system/foo.service. 
-root@debian9:~# lxc-ls -f --running +root@debian11:~# systemctl status foo.service 
-NAME   STATE   AUTOSTART GROUPS IPV4 IPV6  +● foo.service The foo service that does nothing useful 
-lxc-bb RUNNING 0              -    -       +     Loaded: loaded (/lib/systemd/system/foo.service; enabled; vendor preset: enabled) 
 +     Active: active (running) since Wed 2022-07-06 11:41:18 CEST; 19s ago 
 +   Main PID: 997 (sha1sum) 
 +      Tasks: 1 (limit: 19155) 
 +     Memory: 296.0K 
 +        CPU: 19.114s 
 +     CGroup: /system.slice/foo.service 
 +             └─997 /usr/bin/sha1sum /dev/zero 
 + 
 +Jul 06 11:41:18 debian11 systemd[1]: Started The foo service that does nothing useful.
 </code> </code>
  
-===2.5 - Commandes LXC de Base===+Utilisez la commande **ps** pour voir le pourcentage de la CPU utilisé par ce service :
  
-==La Commande lxc-console==+<code> 
 +root@debian11:~# ps -p 997 -o pid,comm,cputime,%cpu 
 +    PID COMMAND             TIME %CPU 
 +    997 sha1sum         00:01:33  100 
 +</code>
  
-Pour lancer une console attachée à un TTY dans le conteneur, il convient d'utiliser la commande **lxc-console** :+Créez maintenant un autre service dénommé **bar** :
  
 <code> <code>
-root@debian9:~# lxc-console --name lxc-bb+root@debian11:~# vi /lib/systemd/system/bar.service 
 +root@debian11:~# cat /lib/systemd/system/bar.service 
 +[Unit] 
 +Description=The bar service that does nothing useful 
 +After=remote-fs.target nss-lookup.target
  
-Connected to tty 1 +[Service] 
-                  Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself+ExecStart=/usr/bin/md5sum /dev/zero  
 +ExecStop=/bin/kill -WINCH ${MAINPID}
  
-lxc-bb login: root +[Install] 
-Password:  +WantedBy=multi-user.target
-Login incorrect +
-lxc-bb login: trainee +
-Password:  +
-Login incorrect +
-lxc-bb login: +
 </code> </code>
  
-<WRAP center round important> +Démarrez et activez le service :
-**Important** - Notez que pour des raisons évidentes, le conteneur BusyBox ne sait pas gérer de logins. +
-</WRAP>+
  
-Pour sortir de la console, il faut utiliser la combinaison de touches **<Ctrl+a> <q>** :+<code> 
 +root@debian11:~# systemctl start bar.service 
 + 
 +root@debian11:~# systemctl enable bar.service 
 + 
 +Created symlink /etc/systemd/system/multi-user.target.wants/bar.service → /lib/systemd/system/bar.service. 
 + 
 +root@debian11:~# systemctl status bar.service 
 +● bar.service - The bar service that does nothing useful 
 +     Loaded: loaded (/lib/systemd/system/bar.service; enabled; vendor preset: enabled) 
 +     Active: active (running) since Wed 2022-07-06 11:45:24 CEST; 15s ago 
 +   Main PID: 1020 (md5sum) 
 +      Tasks: 1 (limit: 19155) 
 +     Memory: 236.0K 
 +        CPU: 15.079s 
 +     CGroup: /system.slice/bar.service 
 +             └─1020 /usr/bin/md5sum /dev/zero 
 + 
 +Jul 06 11:45:24 debian11 systemd[1]: Started The bar service that does nothing useful. 
 +</code> 
 + 
 +Utilisez la commande **ps** pour voir le pourcentage de la CPU utilisé par ce service :
  
 <code> <code>
-lxc-bb login: [Ctrl+a] [q] root@debian9:~# +root@debian11:~# ps -p 1020 -o pid,comm,cputime,%cpu 
 +    PID COMMAND             TIME %CPU 
 +   1020 md5sum          00:01:03 99.4
 </code> </code>
  
-==La Commande lxc-stop==+Vérifiez maintenant la présence des contrôleurs **cpuset** et **cpu** dans l'arborescence du cgroup racine qui est monté à **/sys/fs/cgroup/** :
  
-Pour arrêter le conteneur, utilisez la commande **lxc-stop** :+<code> 
 +root@debian11:~# cat /sys/fs/cgroup/cgroup.controllers 
 +cpuset cpu io memory hugetlb pids rdma            
 +</code> 
 + 
 +Activez maintenant les deux contrôleurs **cpuset** et **cpu** :
  
 <code> <code>
-root@debian9:~# lxc-ls --running +root@debian11:~# cat /sys/fs/cgroup/cgroup.subtree_control 
-lxc-bb  +memory pids 
-root@debian9:~# lxc-stop --name lxc-bb + 
-root@debian9:~# lxc-ls --running +root@debian11:~# echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control 
-root@debian9:~# + 
 +root@debian11:~# echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_control 
 + 
 +root@debian11:~# cat /sys/fs/cgroup/cgroup.subtree_control 
 +cpuset cpu memory pids          
 </code> </code>
  
-==La Commande lxc-execute==+Créez le cgroup **enfant** appelé **FooBar** :
  
-La commande **lxc-execute** démarre un conteneur (qui doit être créé mais arrêté), exécute la commande passée en argument grâce aux caractères **--** puis arrête le conteneur :+<code> 
 +root@debian11:~# mkdir /sys/fs/cgroup/FooBar/ 
 + 
 +root@debian11:~# ls -l /sys/fs/cgroup/FooBar/ 
 +total 0 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 cgroup.controllers 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 cgroup.events 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cgroup.freeze 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cgroup.max.depth 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cgroup.max.descendants 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cgroup.procs 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 cgroup.stat 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cgroup.subtree_control 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cgroup.threads 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cgroup.type 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cpu.max 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cpu.pressure 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cpuset.cpus 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 cpuset.cpus.effective 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cpuset.cpus.partition 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cpuset.mems 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 cpuset.mems.effective 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 cpu.stat 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cpu.weight 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 cpu.weight.nice 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 io.pressure 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 memory.current 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 memory.events 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 memory.events.local 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 memory.high 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 memory.low 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 memory.max 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 memory.min 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 memory.numa_stat 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 memory.oom.group 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 memory.pressure 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 memory.stat 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 memory.swap.current 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 memory.swap.events 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 memory.swap.high 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 memory.swap.max 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 pids.current 
 +-r--r--r-- 1 root root 0 Jul  6 12:18 pids.events 
 +-rw-r--r-- 1 root root 0 Jul  6 12:18 pids.max          
 +</code> 
 + 
 +Activez les contrôleurs **cpuset** et **cpu** pour le cgroup **FooBar** :
  
 <code> <code>
-root@debian9:~# lxc-execute -n lxc-bb -- uname -a +root@debian11:~# echo "+cpu" >> /sys/fs/cgroup/FooBar/cgroup.subtree_control 
-init.lxc.static: initutils.c: mount_fs: 36 failed to mount /proc : Device or resource busy + 
-Linux lxc-bb 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux +root@debian11:~# echo "+cpuset" >> /sys/fs/cgroup/FooBar/cgroup.subtree_control 
-root@debian9:~# lxc-ls --running + 
-root@debian9:~# +root@debian11:~# cat /sys/fs/cgroup/cgroup.subtree_control /sys/fs/cgroup/FooBar/cgroup.subtree_control 
 +cpuset cpu memory pids 
 +cpuset cpu          
 </code> </code>
  
-==La Commande lxc-info==+<WRAP center round important 50% > 
 +**Important** Notez qu'il n'est pas possible d'activer les contrôleurs pour un cgroup enfant si ces mêmes contrôleurs ne sont pas déjà activés pour le cgroup parent. Notez aussi que dans le cgroup **FooBar**, les contrôleurs **memory** et **pids** ne sont **pas** activés. 
 +</WRAP>
  
-Cette commande donne des informations sur un conteneur :+Créez maintenant le répertoire **/sys/fs/cgroup/FooBar/tasks** :
  
 <code> <code>
-root@debian9:~# lxc-info -n lxc-bb +root@debian11:~# mkdir /sys/fs/cgroup/FooBar/tasks 
-Name          lxc-bb +root@debian11:~# ls -l /sys/fs/cgroup/FooBar/tasks 
-State         STOPPED+total 0 
 +-r--r--r-- 1 root root 0 Jul  6 12:20 cgroup.controllers 
 +-r--r--r-- 1 root root 0 Jul  6 12:20 cgroup.events 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cgroup.freeze 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cgroup.max.depth 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cgroup.max.descendants 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cgroup.procs 
 +-r--r--r-- 1 root root 0 Jul  6 12:20 cgroup.stat 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cgroup.subtree_control 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cgroup.threads 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cgroup.type 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cpu.max 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cpu.pressure 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cpuset.cpus 
 +-r--r--r-- 1 root root 0 Jul  6 12:20 cpuset.cpus.effective 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cpuset.cpus.partition 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cpuset.mems 
 +-r--r--r-- 1 root root 0 Jul  6 12:20 cpuset.mems.effective 
 +-r--r--r-- 1 root root 0 Jul  6 12:20 cpu.stat 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cpu.weight 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 cpu.weight.nice 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 io.pressure 
 +-rw-r--r-- 1 root root 0 Jul  6 12:20 memory.pressure         
 </code> </code>
  
-==La Commande lxc-freeze==+<WRAP center round important 50% > 
 +**Important** Le répertoire **/sys/fs/cgroup/FooBar/tasks** définit un groupe //enfant// du cgroup FooBar qui ne concerne que les contrôleurs **cpuset** et **cpu**. 
 +</WRAP>
  
-La commande **lxc-freeze** met en pause tous les processus du conteneur :+De façon à ce que les deux processus issus des services **foo** et **bar** se font concurrence sur la même CPU, injectez la valeur de **1** dans le fichier **/sys/fs/cgroup/FooBar/tasks/cpuset.cpus** :
  
 <code> <code>
-root@debian9:~# lxc-start -n lxc-bb +root@debian11:~# echo "1" > /sys/fs/cgroup/FooBar/tasks/cpuset.cpus 
  
-root@debian9:~# lxc-ls --running +root@debian11:~# cat /sys/fs/cgroup/FooBar/tasks/cpuset.cpus 
-lxc-bb +1       
 +</code>
  
-root@debian9:~# lxc-info -n lxc-bb +<WRAP center round important 50% > 
-Name:           lxc-bb +**Important** Notez que dans les faits, le contrôleur **cpu** n'est activé **que** dans le cas où le cgroup contient au moins 2 processus qui se font concurrence sur la même CPU. 
-State:          RUNNING +</WRAP>
-PID:            3906 +
-CPU use:        0.00 seconds +
-BlkIO use:      0 bytes +
-Memory use:     664.00 KiB +
-KMem use:       340.00 KiB+
  
-root@debian9:~# lxc-freeze -n lxc-bb +Mettez en place une limitation des ressources de la CPU avec la commande suivante :
  
-root@debian9:~# lxc-info -n lxc-bb +<code> 
-Name:           lxc-bb +root@debian11:~# echo "200000 1000000" > /sys/fs/cgroup/FooBar/tasks/cpu.max          
-State:          FROZEN +
-PID:            3906 +
-CPU use:        0.00 seconds +
-BlkIO use:      0 bytes +
-Memory use:     664.00 KiB +
-KMem use:       340.00 KiB+
 </code> </code>
  
-==La Commande lxc-unfreeze==+<WRAP center round important 50% > 
 +**Important** Dans la commande ci-dessus, le premier nombre est un quota en microsecondes pendant lequel les processus dans le cgroup peuvent s'exécuter dans une **période** de temps donnée. Le deuxième nombre, également exprimé en microsecondes, et la **période**. Autrement dit, les processus dans le cgroup seront limités à une exécution de 200 000 / 1 000 000 0.2 secondes pendant chaque seconde.  
 +</WRAP>
  
-La commande **lxc-unfreeze** annule l'effet d'une commande **lxc-freeze** précédente :+Ajoutez maintenant les processus des services **foo** et **bar** au cgroup **FooBar** : 
  
 <code> <code>
-root@debian9:~# lxc-unfreeze -n lxc-bb +echo "997" > /sys/fs/cgroup/FooBar/tasks/cgroup.procs
  
-root@debian9:~# lxc-info -n lxc-bb +echo "1020" > /sys/fs/cgroup/FooBar/tasks/cgroup.procs           
-Name:           lxc-bb +
-State:          RUNNING +
-PID:            3906 +
-CPU use:        0.00 seconds +
-BlkIO use:      0 bytes +
-Memory use:     664.00 KiB +
-KMem use:       340.00 KiB+
 </code> </code>
  
-==Autres Commandes==+Vérifiez la prise en compte par le système de la commande précédente :
  
-Les autres commandes dont il faut avoir une connaissance sont :+<code> 
 +root@debian11:~# cat /proc/997/cgroup /proc/1020/cgroup 
 +0::/FooBar/tasks 
 +0::/FooBar/tasks            
 +</code>
  
-^ Commande ^ Description ^ +Dernièrementutilisez la commande **top** pour constater que la consommation de la CPU et limitée à 20% sur l'ensemble des processus du cgroup **FooBar** **et** que ces 20% sont répartis en parts égales sur les deux processus **foo** et **bar** :
-| lxc-destroy | Permet de détruire complètement un conteneur | +
-| lxc-autostart | Permet de rebootertuer ou arrêter les conteneurs dont le drapeau **lxc.start.auto** est fixé dans le fichier **/var/lib/<nom_conteneur>/config** | +
-| lxc-cgroup | Permet de manipuler à chaud les CGroups pour un conteneur donné | +
-| lxc-device | Permet de rajouter à chaud les devices à un conteneur | +
-| lxc-usernsexec | Permet d'exécuter des commandes en tant que root dans un conteneur non-privilégié | +
-| lxc-wait | Permet d'attendre à ce qu'un conteneur ait atteint un certain état avant de continuer |+
  
-===2.6 - Création d'un Conteneur Non-Privilégié===+<code> 
 +top - 12:36:33 up  1:37,  users,  load average: 0.01, 0.70, 1.39 
 +Tasks: 154 total,   3 running, 151 sleeping,   0 stopped,   0 zombie 
 +%Cpu(s):  2.5 us,  0.0 sy,  0.0 ni, 97.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st 
 +MiB Mem :  16007.9 total,  15503.7 free,    203.6 used,    300.6 buff/cache 
 +MiB Swap:    975.0 total,    975.0 free,      0.0 used.  15536.4 avail Mem 
  
-==User Namespaces==+    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND           
 +    997 root      20      5312    572    508 R  10.0   0.0  50:12.26 sha1sum           
 +   1020 root      20      5308    508    444 R  10.0   0.0  47:00.56 md5sum               
 +</code>
  
-Un conteneur privilégié est un conteneur lancé par l'utilisateur **root** tandis qu'un conteneur non-privilégié est lancé par un utilisateur autre que rootUn conteneur privilégié est moins sécurisé qu'un conteneur non-privilégié mais ne nécessite pas la gestion du mappage d'UID.+===2.La Commande systemctl set-property===
  
-Le mappage d'UID est une fonctionnalité du noyau Linux appelée **user namespaces** ou encore **userns**. Cette fonctionnalité permet de mapper une plage d'UID de la machine hôte vers un utilisateur dont l'UID est 0 dans un autre espace de noms.+Comme déjà vu, systemd organise les processus dans des **slices**, par exemple les utilisateurs sont regroupés dans **/sys/fs/cgroup/user.slice** :
  
-==Création d'un Utilisateur Dédié==+<code> 
 +root@debian11:~# ls -l /sys/fs/cgroup/user.slice 
 +total 0 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 cgroup.controllers 
 +-r--r--r-- 1 root root 0 Jul  6 10:58 cgroup.events 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cgroup.freeze 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cgroup.max.depth 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cgroup.max.descendants 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cgroup.procs 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 cgroup.stat 
 +-rw-r--r-- 1 root root 0 Jul  6 15:05 cgroup.subtree_control 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cgroup.threads 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cgroup.type 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cpu.max 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cpu.pressure 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cpuset.cpus 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 cpuset.cpus.effective 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cpuset.cpus.partition 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cpuset.mems 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 cpuset.mems.effective 
 +-r--r--r-- 1 root root 0 Jul  6 10:58 cpu.stat 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cpu.weight 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 cpu.weight.nice 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 io.pressure 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 memory.current 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 memory.events 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 memory.events.local 
 +-rw-r--r-- 1 root root 0 Jul  6 10:58 memory.high 
 +-rw-r--r-- 1 root root 0 Jul  6 10:58 memory.low 
 +-rw-r--r-- 1 root root 0 Jul  6 10:58 memory.max 
 +-rw-r--r-- 1 root root 0 Jul  6 10:58 memory.min 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 memory.numa_stat 
 +-rw-r--r-- 1 root root 0 Jul  6 10:58 memory.oom.group 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 memory.pressure 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 memory.stat 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 memory.swap.current 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 memory.swap.events 
 +-rw-r--r-- 1 root root 0 Jul  6 16:13 memory.swap.high 
 +-rw-r--r-- 1 root root 0 Jul  6 10:58 memory.swap.max 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 pids.current 
 +-r--r--r-- 1 root root 0 Jul  6 16:13 pids.events 
 +-rw-r--r-- 1 root root 0 Jul  6 10:58 pids.max 
 +drwxr-xr-x 8 root root 0 Jul  6 15:22 user-1000.slice 
 +drwxr-xr-x 5 root root 0 Jul  6 11:41 user-113.slice 
 +</code>
  
-Commencez par créer l’utilisateur **lxcnp** dédié à la gestion des conteneurs non-privilégiés :+et les processus d'un utilisateur spécifique dans un slice dénommé **user-UID.slice** :
  
 <code> <code>
-root@debian9:~# useradd -c "Utilisateur LXC Non-Priviligié" -s /bin/bash -m lxcnp +root@debian11:~# ls -/sys/fs/cgroup/user.slice/user-1000.slice 
-root@debian9:~# passwd lxcnp +total 0 
-Entrez le nouveau mot de passe UNIX trainee +-r--r--r-- 1 root    root    0 Jul  6 16:14 cgroup.controllers 
-Retapez le nouveau mot de passe UNIX : trainee +-r--r--r-- 1 root    root    0 Jul  6 11:30 cgroup.events 
-passwdpassword updated successfully+-rw-r--r-- 1 root    root    0 Jul  6 16:14 cgroup.freeze 
 +-rw-r--r-- 1 root    root    0 Jul  6 16:14 cgroup.max.depth 
 +-rw-r--r-- 1 root    root    0 Jul  6 16:14 cgroup.max.descendants 
 +-rw-r--r-- 1 root    root    0 Jul  6 16:14 cgroup.procs 
 +-r--r--r-- 1 root    root    0 Jul  6 16:14 cgroup.stat 
 +-rw-r--r-- 1 root    root    0 Jul  6 15:05 cgroup.subtree_control 
 +-rw-r--r-- 1 root    root    0 Jul  6 16:14 cgroup.threads 
 +-rw-r--r-- 1 root    root    0 Jul  6 16:14 cgroup.type 
 +-rw-r--r-- 1 root    root    0 Jul  6 16:14 cpu.pressure 
 +-r--r--r-- 1 root    root    0 Jul  6 11:30 cpu.stat 
 +-rw-r--r-- 1 root    root    0 Jul  6 16:14 io.pressure 
 +-r--r--r-- 1 root    root    0 Jul  6 16:14 memory.current 
 +-r--r--r-- 1 root    root    0 Jul  6 16:14 memory.events 
 +-r--r--r-- 1 root    root    0 Jul  6 16:14 memory.events.local 
 +-rw-r--r-- 1 root    root    0 Jul  6 11:30 memory.high 
 +-rw-r--r-- 1 root    root    0 Jul  6 11:30 memory.low 
 +-rw-r--r-- 1 root    root    0 Jul  6 11:30 memory.max 
 +-rw-r--r-- 1 root    root    0 Jul  6 11:30 memory.min 
 +-r--r--r-- 1 root    root    0 Jul  6 16:14 memory.numa_stat 
 +-rw-r--r-- 1 root    root    0 Jul  6 11:30 memory.oom.group 
 +-rw-r--r-- 1 root    root    0 Jul  6 16:14 memory.pressure 
 +-r--r--r-- 1 root    root    0 Jul  6 16:14 memory.stat 
 +-r--r--r-- 1 root    root    0 Jul  6 16:14 memory.swap.current 
 +-r--r--r-- 1 root    root    0 Jul  6 16:14 memory.swap.events 
 +-rw-r--r-- 1 root    root    0 Jul  6 16:14 memory.swap.high 
 +-rw-r--r-- 1 root    root    0 Jul  6 11:30 memory.swap.max 
 +-r--r--r-- 1 root    root    0 Jul  6 16:14 pids.current 
 +-r--r--r-- 1 root    root    0 Jul  6 16:14 pids.events 
 +-rw-r--r-- 1 root    root    0 Jul  6 11:30 pids.max 
 +drwxr-xr-x 2 root    root    0 Jul  6 14:56 session-13.scope 
 +drwxr-xr-x 2 root    root    0 Jul  6 15:22 session-15.scope 
 +drwxr-xr-x 2 root    root    0 Jul  6 11:30 session-4.scope 
 +drwxr-xr-x 2 root    root    0 Jul  6 12:12 session-6.scope 
 +drwxr-xr-x 4 trainee trainee 0 Jul  6 11:30 user@1000.service 
 +drwxr-xr-x 2 root    root    0 Jul  6 11:41 user-runtime-dir@1000.service
 </code> </code>
  
-Les informations concernant le mappage des UID et GID se trouvent dans les fichiers **/etc/subuid** et **/etc/subgid** :+De ce fait, il est possible d'utiliser systemd pour la mise en place des limitations des ressources en utilisant la commande **systemd set-property** : 
 + 
 +==CPU==
  
 <code> <code>
-root@debian9:~# grep lxcnp /etc/sub{uid,gid} +root@debian11:~# systemctl set-property user-1000.slice CPUQuota=40% 
-/etc/subuid:lxcnp:165536:65536 +root@debian11:~# cat /sys/fs/cgroup/user.slice/user-1000.slice/cpu.max 
-/etc/subgid:lxcnp:165536:65536+40000 100000
 </code> </code>
  
-<WRAP center round important> +==Mémoire== 
-**Important** - Ces informations indiquent que nous avons 65 536 UID et 65 536 GID disponibles pour le mappage vers l'UID et le GID **165 536**.+ 
 +<code> 
 +root@debian11:~# systemctl set-property user-1000.slice MemoryMax=1G 
 +root@debian11:~# cat /sys/fs/cgroup/user.slice/user-1000.slice/memory.max 
 +1073741824 
 +</code> 
 + 
 +<WRAP center round important 50% 
 +**Important** - Notez que l'utilisation de **MemoryMax** met en place un **hard limit**. Il est aussi possible de mettre en place un **soft limit** en utilisant **MemoryHigh**. 
 </WRAP> </WRAP>
  
-==Création du Mappage==+=====Présentation de Linux Containers=====
  
-La valeur de **kernel.unprivileged_userns_clone** doit être **1**, or actuellement elle est de **0** :+====LAB #3 - Travailler avec LXC==== 
 + 
 +===3.1 - Installation=== 
 + 
 +Les outils indispensables à l'utilisation des Linux Containers sous Debian sont inclus dans le paquet **lxc** :
  
 <code> <code>
-root@debian9:~# cat /proc/sys/kernel/unprivileged_userns_clone +root@debian11:~# apt install lxc 
 +Reading package lists... Done 
 +Building dependency tree... Done 
 +Reading state information... Done 
 +The following packages were automatically installed and are no longer required: 
 +  libopengl0 linux-headers-5.10.0-15-amd64 linux-headers-5.10.0-15-common 
 +Use 'apt autoremove' to remove them. 
 +The following additional packages will be installed: 
 +  arch-test bridge-utils busybox-static cloud-image-utils debootstrap distro-info 
 +  fakechroot genisoimage libaio1 libdistro-info-perl libfakechroot liblxc1 
 +  libpam-cgfs lxc-templates lxcfs mmdebstrap qemu-utils rsync uidmap uuid-runtime 
 +Suggested packages: 
 +  ubuntu-archive-keyring squid-deb-proxy-client shunit2 wodim cdrkit-doc btrfs-progs 
 +  lvm2 python3-lxc qemu-user-static apt-transport-tor binfmt-support perl-doc proot 
 +  qemu-user squashfs-tools-ng qemu-block-extra 
 +The following packages will be REMOVED: 
 +  busybox 
 +The following NEW packages will be installed: 
 +  arch-test bridge-utils busybox-static cloud-image-utils debootstrap distro-info 
 +  fakechroot genisoimage libaio1 libdistro-info-perl libfakechroot liblxc1 
 +  libpam-cgfs lxc lxc-templates lxcfs mmdebstrap qemu-utils rsync uidmap 
 +  uuid-runtime 
 +0 upgraded, 21 newly installed, 1 to remove and 5 not upgraded. 
 +Need to get 6,127 kB of archives. 
 +After this operation, 33.2 MB of additional disk space will be used. 
 +Do you want to continue? [Y/n] y
 </code> </code>
  
-Fixez donc la valeur à **1** et appliquez la modification avec la commande **sysctl --system** :+L'installation de ce paquet va créer les répertoires **/usr/share/lxc/config** contenant les fichiers de configurations des gabarits ainsi que le répertoire **/usr/share/lxc/templates** contenant fichiers de gabarits pour la création des conteneurs :
  
 <code> <code>
-root@debian9:~# echo "kernel.unprivileged_userns_clone=1"/etc/sysctl.d/80-lxc-userns.conf +root@debian11:~# ls /usr/share/lxc 
-root@debian9:~# cat /etc/sysctl.d/80-lxc-userns.conf +config  hooks  lxc.functions  lxc-patch.py  selinux  templates 
-kernel.unprivileged_userns_clone=1 + 
-root@debian9:~# sysctl --system +root@debian11:~# ls /usr/share/lxc/config 
-* Applying /etc/sysctl.d/80-lxc-userns.conf ... +alpine.common.conf     gentoo.moresecure.conf  slackware.userns.conf 
-kernel.unprivileged_userns_clone = 1 +alpine.userns.conf     gentoo.userns.conf      sparclinux.common.conf 
-* Applying /etc/sysctl.d/99-sysctl.conf ... +archlinux.common.conf  nesting.conf            sparclinux.userns.conf 
-* Applying /etc/sysctl.conf ...+archlinux.userns.conf  oci.common.conf         ubuntu-cloud.common.conf 
 +centos.common.conf     opensuse.common.conf    ubuntu-cloud.lucid.conf 
 +centos.userns.conf     opensuse.userns.conf    ubuntu-cloud.userns.conf 
 +common.conf            openwrt.common.conf     ubuntu.common.conf 
 +common.conf.d          oracle.common.conf      ubuntu.lucid.conf 
 +common.seccomp         oracle.userns.conf      ubuntu.userns.conf 
 +debian.common.conf     plamo.common.conf       userns.conf 
 +debian.userns.conf     plamo.userns.conf       voidlinux.common.conf 
 +fedora.common.conf     sabayon.common.conf     voidlinux.userns.conf 
 +fedora.userns.conf     sabayon.userns.conf 
 +gentoo.common.conf     slackware.common.conf 
 + 
 +root@debian11:~# ls /usr/share/lxc/templates 
 +lxc-alpine     lxc-cirros         lxc-gentoo        lxc-oracle     lxc-sparclinux 
 +lxc-altlinux   lxc-debian         lxc-local         lxc-plamo      lxc-sshd 
 +lxc-archlinux  lxc-download       lxc-oci           lxc-pld        lxc-ubuntu 
 +lxc-busybox    lxc-fedora         lxc-openmandriva  lxc-sabayon    lxc-ubuntu-cloud 
 +lxc-centos     lxc-fedora-legacy  lxc-opensuse      lxc-slackware  lxc-voidlinux
 </code> </code>
  
-Connectez-vous ensuite en tant que l'utilisateur **lxcnp** :+===3.2 Création d'un Conteneur Simple=== 
 + 
 +Créez un conteneur simple en utilisant la commande suivante :
  
 <code> <code>
-root@debian9:~# su lxcnp +root@debian11:~# lxc-create -n lxc-bb -t busybox
-lxcnp@debian9:~$ +
 </code> </code>
  
-Créez le répertoire **~/.config/lxc** :+<WRAP center round important 50%> 
 +**Important** - Notez l'utilisation de l'option **-n** qui permet d'associer un nom au conteneur ainsi que l'option **-t** qui indique le gabarit à utiliser. Notez aussi que le gabarit est référencé par le nom du fichier dans le répertoire **/usr/share/lxc/templates** sans son préfix **lxc-**. 
 +</WRAP> 
 + 
 +Le **backingstore** (// méthode de stockage//) utilisé par défaut est **dir** ce qui implique que le **rootfs** du conteneur se trouve sur disque dans le répertoire **/var/lib/lxc/** :
  
 <code> <code>
-lxcnp@debian9:~$ mkdir -~/.config/lxc+root@debian11:~# ls /var/lib/lxc/ 
 +lxc-bb 
 + 
 +root@debian11:~# ls /var/lib/lxc/lxc-bb/ 
 +config  rootfs 
 + 
 +root@debian11:~# ls /var/lib/lxc/lxc-bb/rootfs 
 +bin  dev  etc  home  lib  lib64  mnt  proc  root  sbin  selinux  sys  tmp  usr  var
 </code> </code>
  
-Créez trois entrées dans le fichier **~/.config/lxc/default.conf** afin d'y inclure la configuration du fichier **/etc/lxc/default.conf** et mapper l'UID et le GID :+Il est à noter que LXC peut également utiliser des backingstores de type : 
 + 
 +  ZFS 
 +  Brtfs 
 +  LVM 
 +  Loop 
 +  * rbd (CephFS) 
 + 
 +===3.3 - Démarrage d'un Conteneur Simple=== 
 + 
 +Pour démarrer le conteneur, il convient d'utiliser la commande **lxc-start** :
  
 <code> <code>
-lxcnp@debian9:~$ echo "lxc.include = /etc/lxc/default.conf" >> ~/.config/lxc/default.conf+root@debian9:~lxc-start --name lxc-bb 
 +</code>
  
-lxcnp@debian9:~$ echo "lxc.id_map u 0 165536 65536" >> ~/.config/lxc/default.conf +===3.4 - S'attacher à un Conteneur Simple===
  
-lxcnp@debian9:~$ echo "lxc.id_map = g 0 165536 65536" >> ~/.config/lxc/default.conf +Pour s'attacher au conteneur démarré, il convient d'utiliser la commande **lxc-attach** :
  
-lxcnp@debian9:~$ cat ~/.config/lxc/default.conf  +<code> 
-lxc.include = /etc/lxc/default.conf +root@debian11:~# lxc-start --name lxc-bb 
-lxc.id_map = u 0 165536 65536 + 
-lxc.id_map = g 0 165536 65536+root@debian11:~lxc-attach --name lxc-bb 
 +lxc-attach: lxc-bb: terminal.c: lxc_terminal_create_native: 924 No space left on device - Failed to open terminal multiplexer device 
 + 
 + 
 +BusyBox v1.30.1 (Debian 1:1.30.1-6+b3) built-in shell (ash) 
 +Enter 'help' for a list of built-in commands. 
 + 
 +~ # which passwd 
 +/bin/passwd 
 +~ # 
 +</code>  
 + 
 +<WRAP center round important 50%> 
 +**Important** - Notez l'absence de la commande **passwd** dans le conteneur, ce qui explique l'erreur lors de la création de celui-ci. 
 +</WRAP> 
 + 
 +Pour sortir du conteneur, il convient d'utiliser la commande **exit** ou bien la combinaison de touches **<Ctrl+d>** : 
 + 
 +<code> 
 +~ # [Ctrl+d] 
 +~ # root@debian11:~#
 </code> </code>
  
-Déconnectez-vous et reconnectez-vous en tant que l'utilisateur **lxcnp** :+Le fait de sortir du conteneur ne l'arrête pas pour autant, comme il peut être constaté par l'utilisation de la commande **lxc-ls** :
  
 <code> <code>
-lxcnp@debian9:~$ exit +~ # root@debian11:~# [Enter] 
-déconnexion + 
-root@debian9:~# su lxcnp +root@debian11:~# lxc-ls --running 
-lxcnp@debian9:~$+lxc-bb  
 + 
 +root@debian11:~# lxc-ls -f --running 
 +NAME   STATE   AUTOSTART GROUPS IPV4      IPV6 UNPRIVILEGED  
 +lxc-bb RUNNING 0              10.0.3.48 -    false          -      -    -       
 </code> </code>
  
-==Création du Conteneur==+===3.5 - Commandes LXC de Base===
  
-Créez maintenant un conteneur non-privilégié appelé **lxc-bb-np** à partir du gabarit **busybox** :+==La Commande lxc-console== 
 + 
 +Pour lancer une console attachée à un TTY dans le conteneur, il convient d'utiliser la commande **lxc-console** :
  
 <code> <code>
-lxcnp@debian9:~lxc-create -n lxc-bb-np -t busybox +root@debian11:~lxc-console --name lxc-bb
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-WARN: could not reopen tty: Permission denied +
-chmod: impossible d'accéder à '/home/lxcnp/.local/share/lxc/lxc-bb-np/rootfs/bin/passwd': Aucun fichier ou dossier de ce type +
-setting root password to "root" +
-Failed to change root password+
  
-lxcnp@debian9:~$ ls -l /home/lxcnp/.local/share/lxc/lxc-bb-np/rootfs/ +Connected to tty 1 
-total 60 +Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself 
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 bin + 
-drwxr-xr-x 4 165536 165536 4096 juil. 29 13:11 dev +lxc-bb login:
-drwxr-xr-x 3 165536 165536 4096 juil. 29 13:11 etc +
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 home +
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 lib +
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 lib64 +
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 mnt +
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 proc +
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 root +
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 sbin +
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 selinux +
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 sys +
-drwxr-xr-x 2 165536 165536 4096 juil. 29 13:11 tmp +
-drwxr-xr-x 7 165536 165536 4096 juil. 29 13:11 usr +
-drwxr-xr-x 3 165536 165536 4096 juil. 29 13:11 var+
 </code> </code>
  
-==Contrôle du Mappage==+Pour sortir de la console, il faut utiliser la combinaison de touches **<Ctrl+a> <q>** :
  
-Démarrez le conteneur :+<code> 
 +lxc-bb login: [Ctrl+a] [q] root@debian11:~#  
 +</code> 
 + 
 +==La Commande lxc-stop== 
 + 
 +Pour arrêter le conteneur, utilisez la commande **lxc-stop** :
  
 <code> <code>
-lxcnp@debian9:~lxc-start -lxc-bb-np +root@debian11:~lxc-ls --running 
-lxcnp@debian9:~lxc-ls ---running +lxc-bb  
-NAME      STATE   AUTOSTART GROUPS IPV4 IPV6  + 
-lxc-bb-np RUNNING 0              -    +root@debian11:~lxc-stop --name lxc-bb 
 + 
 +root@debian11:~# lxc-ls --running 
 + 
 +root@debian11:~#
 </code> </code>
  
-Attachez-vous au conteneur et contrôlez l'UID de l'utilisateur des processus dans le conteneur :+==La Commande lxc-execute== 
 + 
 +La commande **lxc-execute** démarre un conteneur (qui doit être créé mais arrêté), exécute la commande passée en argument grâce aux caractères **--** puis arrête le conteneur :
  
 <code> <code>
-lxcnp@debian9:~lxc-attach -n lxc-bb-np +root@debian11:~lxc-execute -n lxc-bb -- uname -a 
-WARN: could not reopen tty: Permission denied +Linux lxc-bb 5.10.0-24-amd64 #1 SMP Debian 5.10.179-5 (2023-08-08) x86_64 GNU/Linux
-                                             WARN: could not reopen tty: Permission denied +
-          WARN: could not reopen tty: Permission denied+
  
 +root@debian11:~# lxc-ls --running
  
-BusyBox v1.22.1 (Debian 1:1.22.0-19+b3) built-in shell (ash) +root@debian11:~#  
-Enter 'help' for a list of built-in commands.+</code>
  
-/ # ps aux +==La Commande lxc-info== 
-PID   USER     COMMAND + 
-    1 root     init +Cette commande donne des informations sur un conteneur : 
-    4 root     /bin/syslogd + 
-    root     /bin/getty -L tty1 115200 vt100 +<code> 
-    8 root     init +root@debian11:~# lxc-info -n lxc-bb 
-    9 root     /bin/sh +Name:           lxc-bb 
-   10 root     ps aux +State:          STOPPED
-/ # +
 </code> </code>
  
-Détachez-vous du conteneur et sortez du compte **lxcnp** :+==La Commande lxc-freeze== 
 + 
 +La commande **lxc-freeze** met en pause tous les processus du conteneur :
  
 <code> <code>
-exit +root@debian11:~lxc-start -n lxc-bb  
-lxcnp@debian9:~$ exit + 
-déconnexion +root@debian11:~# lxc-ls --running 
-root@debian9:~# +lxc-bb  
 + 
 +root@debian11:~# lxc-info -n lxc-bb 
 +Name:           lxc-bb 
 +State:          RUNNING 
 +PID:            28581 
 +IP:             10.0.3.65 
 +Link:           vethcJlTVk 
 + TX bytes:      1.22 KiB 
 + RX bytes:      3.88 KiB 
 + Total bytes:   5.10 KiB 
 + 
 +root@debian11:~# lxc-freeze -n lxc-bb 
 + 
 +root@debian11:~# lxc-info -n lxc-bb 
 +Name:           lxc-bb 
 +State:          FROZEN 
 +PID:            28581 
 +IP:             10.0.3.65 
 +Link:           vethcJlTVk 
 + TX bytes:      1.22 KiB 
 + RX bytes:      4.06 KiB 
 + Total bytes:   5.28 KiB 
 + 
 +root@debian11:~# 
 </code> </code>
  
-Dernièrement, vérifiez l'UID de l'utilisateur des processus appartenant au conteneur :+==La Commande lxc-unfreeze== 
 + 
 +La commande **lxc-unfreeze** annule l'effet d'une commande **lxc-freeze** précédente :
  
 <code> <code>
-root@debian9:~# ps aux | grep 165536 +root@debian11:~# lxc-unfreeze -n lxc-bb 
-165536    3450  0.0  0.0   4832   256 ?        Ss   13:17   0:00 init + 
-165536    3462  0.0  0.0   4836   100 ?        Ss   13:17   0:00 /bin/syslogd +root@debian11:~# lxc-info -n lxc-bb 
-165536    3465  0.0  0.0   4832   256 pts/0    Ss+  13:17   0:00 /bin/getty -L tty1 115200 vt100 +Name          lxc-bb 
-165536    3466  0.0  0.0   4832   108 pts/2    Ss+  13:17   0:00 init +State         RUNNING 
-root      3485  0.0  0.0  12784   932 pts/0    S+   13:22   0:00 grep 165536+PID           28581 
 +IP:             10.0.3.65 
 +Link          vethcJlTVk 
 + TX bytes     1.22 KiB 
 + RX bytes:      4.47 KiB 
 + Total bytes:   5.69 KiB
 </code> </code>
  
-===2.- Création d'un Conteneur Éphémère===+==Autres Commandes=
 + 
 +Les autres commandes dont il faut avoir une connaissance sont : 
 + 
 +^ Commande ^ Description ^ 
 +| lxc-destroy | Permet de détruire complètement un conteneur | 
 +| lxc-autostart | Permet de rebooter, tuer ou arrêter les conteneurs dont le drapeau **lxc.start.auto** est fixé dans le fichier **/var/lib/<nom_conteneur>/config** | 
 +| lxc-cgroup | Permet de manipuler à chaud les CGroups pour un conteneur donné | 
 +| lxc-device | Permet de rajouter à chaud les devices à un conteneur | 
 +| lxc-usernsexec | Permet d'exécuter des commandes en tant que root dans un conteneur non-privilégié | 
 +| lxc-wait | Permet d'attendre à ce qu'un conteneur ait atteint un certain état avant de continuer | 
 + 
 +===3.- Création d'un Conteneur Éphémère===
  
 Par défaut les conteneurs LXC sont permanents. Il est possible de créer un conteneur éphémère, c'est-à-dire un conteneur où toutes les données sont détruites à l'arrêt de celui-ci, en utilisant la commande **lxc-copy** ainsi que l'option de cette commande **--epheremal** ou **-e**.  Par défaut les conteneurs LXC sont permanents. Il est possible de créer un conteneur éphémère, c'est-à-dire un conteneur où toutes les données sont détruites à l'arrêt de celui-ci, en utilisant la commande **lxc-copy** ainsi que l'option de cette commande **--epheremal** ou **-e**. 
Ligne 942: Ligne 1466:
  
 <code> <code>
-root@debian9:~# lxc-ls -f --running +root@debian11:~# lxc-ls -f --running 
-NAME   STATE   AUTOSTART GROUPS IPV4 IPV6  +NAME   STATE   AUTOSTART GROUPS IPV4      IPV6 UNPRIVILEGED  
-lxc-bb RUNNING 0              -       +lxc-bb RUNNING 0              10.0.3.65 -    false     
 +     
 +root@debian11:~# lxc-copy -e -N lxc-bb-eph -n lxc-bb
  
-root@debian9:~# lxc-copy --N lxc-bb-eph -n lxc-bb +root@debian11:~# lxc-ls ---running 
-lxc-copylxccontainer.c: do_lxcapi_clone: 3079 error: Original container (lxc-bb) is running+ 
 +root@debian11:~#
 </code> </code>
  
Ligne 953: Ligne 1480:
  
 <code> <code>
-root@debian9:~# lxc-stop -n lxc-bb +root@debian11:~# lxc-stop -n lxc-bb 
-root@debian9:~# lxc-ls -f --running + 
-root@debian9:~# lxc-copy -e -N lxc-bb-eph -n lxc-bb+root@debian11:~# lxc-ls -f --running 
 + 
 +root@debian11:~# lxc-copy -e -N lxc-bb-eph -n lxc-bb
 Created lxc-bb-eph as clone of lxc-bb Created lxc-bb-eph as clone of lxc-bb
 +
 +root@debian11:~# lxc-ls -f --running
 +NAME       STATE   AUTOSTART GROUPS IPV4      IPV6 UNPRIVILEGED 
 +lxc-bb-eph RUNNING 0              10.0.3.21 -    false 
 </code> </code>
  
Ligne 962: Ligne 1495:
  
 <code> <code>
-root@debian9:~# lxc-attach lxc-bb-eph +root@debian11:~# lxc-ls ---running 
-lxc-attach: missing container name, use --name option +NAME       STATE   AUTOSTART GROUPS IPV4      IPV6 UNPRIVILEGED  
-root@debian9:~# lxc-attach -lxc-bb-eph+lxc-bb-eph RUNNING 0              10.0.3.21    false         
 +root@debian11:~# lxc-attach lxc-bb-eph 
 +lxc-attach: lxc-bb-eph: terminal.c: lxc_terminal_create_native: 924 No space left on device - Failed to open terminal multiplexer device
  
  
-BusyBox v1.22.1 (Debian 1:1.22.0-19+b3) built-in shell (ash)+BusyBox v1.30.1 (Debian 1:1.30.1-6+b3) built-in shell (ash)
 Enter 'help' for a list of built-in commands. Enter 'help' for a list of built-in commands.
  
Ligne 977: Ligne 1512:
 <code> <code>
 ~ # ls -l ~ # ls -l
-total 4 +total 0 
--rw-r--r--    1 root     root            51 Jul 28 13:47 hi.sh+
 ~ # pwd ~ # pwd
 /root /root
 +
 ~ # echo "test" > testdata ~ # echo "test" > testdata
 +
 ~ # ls -l ~ # ls -l
-total +total 4 
--rw-r--r--    1 root     root            51 Jul 28 13:47 hi.sh +-rw-r--r--    1 root     root             Aug 20 09:10 testdata 
--rw-r--r--    1 root     root             Jul 29 15:14 testdata+
 ~ #  ~ # 
 </code> </code>
Ligne 994: Ligne 1531:
 ~ # exit ~ # exit
  
-root@debian9:~# lxc-attach -n lxc-bb-eph+root@debian11:~# lxc-attach -n lxc-bb-eph 
 +lxc-attach: lxc-bb-eph: terminal.c: lxc_terminal_create_native: 924 No space left on device - Failed to open terminal multiplexer device
  
  
-BusyBox v1.22.1 (Debian 1:1.22.0-19+b3) built-in shell (ash)+BusyBox v1.30.1 (Debian 1:1.30.1-6+b3) built-in shell (ash)
 Enter 'help' for a list of built-in commands. Enter 'help' for a list of built-in commands.
  
 ~ # ls -l ~ # ls -l
-total +total 4 
--rw-r--r--    1 root     root            51 Jul 28 13:47 hi.sh +-rw-r--r--    1 root     root             Aug 20 09:10 testdata 
--rw-r--r--    1 root     root             Jul 29 15:14 testdata + 
-~ # +~ #
 </code> </code>
  
Ligne 1016: Ligne 1554:
 ~ # exit ~ # exit
  
-root@debian9:~# lxc-stop -n lxc-bb-eph+root@debian11:~# lxc-stop -n lxc-bb-eph
  
-root@debian9:~# lxc-ls+root@debian11:~# lxc-ls
 lxc-bb  lxc-bb 
  
-root@debian9:~# lxc-start -n lxc-bb-eph +root@debian11:~# lxc-start -n lxc-bb-eph 
-lxc-start: log.c: log_open: 300 failed to open log file "/var/lib/lxc/lxc-bb-eph/lxc-bb-eph.log" : No such file or directory +lxc-start: lxc-bb-eph: tools/lxc_start.c: main: 268 No container config specified 
-lxc-start: tools/lxc_start.c: main: 317 Executing '/sbin/init' with no configuration file may crash the host+ 
 +root@debian11:~#
 </code> </code>
  
Ligne 1030: Ligne 1569:
 </WRAP> </WRAP>
  
-===2.- Sauvegarde des Conteneurs===+===3.- Sauvegarde des Conteneurs===
  
 Un conteneur LXC peut être sauvegardé de trois façons différentes : Un conteneur LXC peut être sauvegardé de trois façons différentes :
Ligne 1043: Ligne 1582:
  
 <code> <code>
-root@debian9:~# lxc-ls -f --running+root@debian11:~# lxc-ls -f --running
  
-root@debian9:~# lxc-snapshot -n lxc-bb +root@debian11:~# lxc-snapshot -n lxc-bb 
-lxc-snapshot: lxccontainer.c: do_lxcapi_snapshot: 3407 Snapshot of directory-backed container requested. + 
-lxc-snapshotlxccontainer.c: do_lxcapi_snapshot: 3408 Making a copy-clone.  If you do want snapshots, then +root@debian11:~#
-lxc-snapshot: lxccontainer.c: do_lxcapi_snapshot: 3409 please create an aufs or overlayfs clone first, snapshot that +
-lxc-snapshot: lxccontainer.c: do_lxcapi_snapshot: 3410 and keep the original container pristine.+
 </code> </code>
  
Ligne 1055: Ligne 1592:
  
 <code> <code>
-root@debian9:~# ls -l /var/lib/lxc/lxc-bb+root@debian11:~# ls -l /var/lib/lxc/lxc-bb
 total 12 total 12
--rw-r--r--  1 root root 1102 juil. 28 13:04 config +-rw-r-----  1 root root 1276 Aug 20 10:01 config 
--rw-r--r--  1 root root    0 juil. 28 13:14 lxc-bb.log +drwxr-xr-x 17 root root 4096 Aug 20 10:38 rootfs 
-drwxr-xr-x 17 root root 4096 juil. 28 15:50 rootfs +drwxr-xr-x  3 root root 4096 Aug 20 12:35 snaps
-drwxr-xr-x  3 root root 4096 juil. 29 17:34 snaps+
  
-root@debian9:~# ls -l /var/lib/lxc/lxc-bb/snaps/+root@debian11:~# ls -l /var/lib/lxc/lxc-bb/snaps/
 total 4 total 4
-drwxrwx--- 3 root root 4096 juil. 29 17:34 snap0+drwxrwx--- 3 root root 4096 Aug 20 12:35 snap0
  
-root@debian9:~# ls -l /var/lib/lxc/lxc-bb/snaps/snap0/+root@debian11:~# ls -l /var/lib/lxc/lxc-bb/snaps/snap0/
 total 12 total 12
--rw-r--r--  1 root root 1110 juil. 29 17:34 config +-rw-r-----  1 root root 1284 Aug 20 12:35 config 
-drwxr-xr-x 17 root root 4096 juil. 28 15:50 rootfs +drwxr-xr-x 17 root root 4096 Aug 20 10:38 rootfs 
--rw-r--r--  1 root root   19 juil. 29 17:34 ts+-rw-r--r--  1 root root   19 Aug 20 12:35 ts
 </code> </code>
  
Ligne 1076: Ligne 1612:
  
 <code> <code>
-root@debian9:~# cat /var/lib/lxc/lxc-bb/snaps/snap0/ts  +root@debian11:~# cat /var/lib/lxc/lxc-bb/snaps/snap0/ts  
-2020:07:29 17:34:36root@debian9:~# +2023:08:20 12:35:35root@debian11:~# 
 </code> </code>
  
Ligne 1083: Ligne 1619:
  
 <code> <code>
-root@debian9:~# du -sh /var/lib/lxc/lxc-bb/rootfs/ +root@debian11:~# du -sh /var/lib/lxc/lxc-bb/rootfs/ 
-792K /var/lib/lxc/lxc-bb/rootfs/+2.1M    /var/lib/lxc/lxc-bb/rootfs/
  
-root@debian9:~# du -sh /var/lib/lxc/lxc-bb/snaps/snap0/rootfs/ +root@debian11:~# du -sh /var/lib/lxc/lxc-bb/snaps/snap0/rootfs/ 
-792K /var/lib/lxc/lxc-bb/snaps/snap0/rootfs/+2.1M    /var/lib/lxc/lxc-bb/snaps/snap0/rootfs/
 </code> </code>
  
Ligne 1093: Ligne 1629:
  
 <code> <code>
-root@debian9:~# lxc-snapshot -r snap0 -n lxc-bb -N lxc-bb-snap0+root@debian11:~# lxc-snapshot -r snap0 -n lxc-bb -N lxc-bb-snap0
  
-root@debian9:~# lxc-ls+root@debian11:~# lxc-ls
 lxc-bb       lxc-bb-snap0  lxc-bb       lxc-bb-snap0 
  
-root@debian9:~# lxc-start -n lxc-bb-snap0+root@debian11:~# lxc-start -n lxc-bb-snap0
  
-root@debian9:~# lxc-attach -n lxc-bb-snap0+root@debian11:~# lxc-attach -n lxc-bb-snap0 
 +lxc-attach: lxc-bb-snap0: terminal.c: lxc_terminal_create_native: 924 No space left on device - Failed to open terminal multiplexer device
  
  
-BusyBox v1.22.1 (Debian 1:1.22.0-19+b3) built-in shell (ash)+BusyBox v1.30.1 (Debian 1:1.30.1-6+b3) built-in shell (ash)
 Enter 'help' for a list of built-in commands. Enter 'help' for a list of built-in commands.
  
 ~ # exit ~ # exit
-root@debian9:~#  
-</code> 
- 
  
 +root@debian11:~# 
 +</code>
 ----- -----
-<html> + 
-<div align="center"> +Copyright © 2024 Hugh Norris.
-Copyright © 2021 Hugh Norris +
-</div> +
-</html>+
Menu